codeforces 467B Fedor and New Game 解题报告

题目链接:http://codeforces.com/contest/467/problem/B

题目意思:有 m + 1 个 player 和 n 种类型的 soldiers。每个player被赋予一个数xi,然后将xi 看成二进制数,规定第 j 位 如果为1,表示这个 player 有j 这种类型的soldiers。Fedor 是 第 m + 1 个player,问他能跟前面 m 个players 成为 friends 的 人数。成为friends 的条件是被比较的两个人的不同soldiers数不得多于 k 个。

    好容易想到方法,就是异或之后统计1的个数。不过数组开小了,被人 hack !而且比赛时间只有一小时,校园网断网!有进步的是,有时间做了下C,虽然是错掉了。

     太粗心了,留个纪念吧~~~

    

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 1000 + 10;
 8 int a[maxn];
 9 
10 int main()
11 {
12     int n, m, k;
13     while (scanf("%d%d%d", &n, &m, &k) != EOF)
14     {
15         for (int i = 0; i < m; i++)
16             scanf("%d", &a[i]);
17         scanf("%d", &a[m]);
18         int ans = 0;
19         for (int i = 0; i < m; i++)
20         {
21             int tmp = a[i] ^ a[m];
22             int cnt = 0;
23             for (; tmp; tmp >>= 1)
24             {
25                 if (tmp & 1)
26                     cnt++;
27             }
28             if (cnt <= k)
29                 ans++;
30         }
31         printf("%d\n", ans);
32     }
33     return 0;
34 }

 

    

posted @ 2014-09-19 12:54  windysai  阅读(585)  评论(0编辑  收藏  举报