Olympic Parade
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/I
【题意】:
给出N个数,找出没有恰好出现K次的那个数.
【解题思路】:
题目卡了一下内存,不能太暴力...
然而还是很暴力,排个序再遍历就好.
也可以用位运算写成只要4KB:
把所有数字的二进制位都累加起来(就是算第i位一共出现了几次1)
如果某一位上1的数目不是k的倍数,那么要找的那个数在这一位必定为1,否则为0。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
#define maxn 1100000
#define IN freopen("in.txt","r",stdin);
using namespace std; int n,k;
int bits[]; int main(int argc, char const *argv[])
{
//IN; while(scanf("%d %d",&n,&k)!=EOF)
{
memset(bits,,sizeof(bits)); for(int i=; i<=n; i++){
int x;scanf("%d",&x);
int j = ;
while(x!=){
bits[j] += x%;
j++;
x /= ;
}
} int ans = ;
for(int i=; i<=; i++){
int tmp = bits[i];
if(tmp%k == ) continue;
ans += (<<i);
} printf("%d\n", ans);
} return ;
}