您的位置:首页 > Web前端

Codeforces Round #267 (Div. 2) B. Fedor and New Game

2015-12-18 11:32 495 查看
题目链接:http://codeforces.com/contest/467/problem/B

题意:m+1个玩家,n种不同类型的士兵,玩家从1~m+1编号,士兵的类型由0~n-1编号,第i个玩家的军队可以由一个非负整数x[i]表示,考虑用二进制表示x[i],如果x[i]的第j位是1,那么第i个玩家有第j种士兵,如果两个玩家的士兵的不同种类不超过k,他们可以成为盟友,求第m+1有多少个盟友。

题解:也就是给你m+1个数让你判断所给数的二进制形式与第m+1个数不相同的位数是不是小于等于k,是的话就累计起来。要知道位运算的用法

补充:“<< ” 位左移,相当于乘以2

“>>" 位右移,相当于除以2

“&” 按为与,位数都为1时为1,否则为0

“^” 异或,不同为1,相同为0

AC代码:

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int n,m,k,x[1010],i,ans,j;
ans=0;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=m+1;i++)
scanf("%d",&x[i]);
for(i=1;i<=m;i++)
{
int temp=0;
for(j=0;j<n;j++)
if((x[i]&(1<<j))^(x[m+1]&(1<<j))) temp++;
if(temp<=k) ans++;
}
printf("%d\n",ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: