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代码:
题意: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); }
相关文章推荐
- jquery中ajax跨域方法实例分析
- NodeJs+Eclipse环境配置
- [AngularJS面面观] 1. scope中的Dirty Checking(脏数据检查) --- 引言
- CSS核心内容整理 - (中) css学习
- 使用<script>和HTML5<template>作为模板元素的差别:能否使用jQuery选中
- jstl获取常量、枚举,防止硬编码标签实现
- 调取jSon数据--展示
- 解决jQuery上传插件Uploadify出现Http Error 302错误的方法
- JavaScript Math.round() 方法
- JSON及其在项目中的使用
- 如何把前台传的两个date类型在js中转换成天
- 解决Bootstrap中代码不高亮问题
- js取配置文件内容
- html居中的元素带有float属性
- JavaScript如何实现对数字保留两位小数一位自动补零
- 通过修改父类样式名。改变子类样式的
- js格式化时间的方法
- Game of Life LEETCODE中档算法题JAVA实现
- 百度移动联盟phonegap/cordova插件使用总结
- 谈谈我对JavaScript DOM事件的理解