神奇的二进制
来源:互联网 发布:php邀请码生成算法 编辑:程序博客网 时间:2024/06/05 06:12
NYOJ找球号:
计算一个数二进制每一位的贡献:#include<iostream>#include<cstdio>#include<cstring>#include<stdlib.h>#include<algorithm>using namespace std;int x[110];void change(int a)//把a转化为二进制存到数组里{ for(int i=0; a!=0; i++) { if(a&1) x[i]++; a>>=1; }}int get_mi(int a)//求2的a次方{ int sum=1; for(int i=0; i<a; i++) sum*=2; return sum;}int get_ans(){ int ans=0; for(int i=32; i>=0; i--) { if(x[i]%2)//如果这一位以上的1的个数是奇数则说明这个数出现过的次数是奇数 ans+=get_mi(i); } return ans;}int main(){ int n; while(~scanf("%d",&n)) { memset(x,0,sizeof(x)); int a; for(int i=0; i<n; i++) { scanf("%d",&a); change(a); } printf("%d\n",get_ans()); }}
二进制优化的神奇: #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int x[4000010];int main(){ int n; scanf("%d",&n); while(n--) { string a; cin>>a; int m; scanf("%d",&m); if(a[0]=='A') { int b; for(int i=0;i<m;i++) { scanf("%d",&b); x[b/32]|=(1<<(b%32));//余数不可能相同,同余则商不同,1<<b%32那个位置上按位或后肯定为1 } } else { int b; for(int i=0;i<m;i++) { scanf("%d",&b); if(x[b/32]&(1<<(b%32)))//1<<b%32如果出现过,则按位与后不为0,否则为0 printf("YES\n"); else printf("NO\n"); } } }}
0 0
- 神奇的二进制
- 二进制的神奇应用
- 神奇的二进制
- 神奇的二进制
- 十进制转二进制的神奇代码
- 尼玛二进制真神奇
- 好玩的运算符,二进制真是个神奇的东东
- 数学小魔术——神奇的二进制
- 神奇的位运算——二进制中1的个数
- 神奇的的调色板
- 神奇的*号
- 一组神奇的图片
- 神奇的一天
- 神奇的预言
- 神奇的jsfl!
- 神奇的VIM
- 神奇的猴子Mono
- 神奇的xx宏
- php-base
- 序
- [LeetCode]--5. Longest Palindromic Substring
- Android之使用AIDL时的跨进程回调—Server回调Client
- Android TextView显示表情、标签、超链接
- 神奇的二进制
- 数楼梯(斐波拉契数列+高精度加法)
- SQL中char、varchar、nvarchar的区别
- 尚学堂Java视频精华集锦
- day03 创建自定义控件
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- JSP 连接数据库
- JDBC连接数据库小示例