zzulioj--1832--贪吃的松鼠(位运算好题)
来源:互联网 发布:php 不显示warning 编辑:程序博客网 时间:2024/04/29 17:55
1832: 贪吃的松鼠
Time Limit: 3 Sec Memory Limit: 2 MBSubmit: 43 Solved: 7
SubmitStatusWeb Board
Description
冬天到了,n只松鼠决定一起采集一波坚果过冬,可是在松鼠老大清点的时候,发现少了一些食物,于是召开松鼠大会,知道是有一只小松鼠偷吃了一部分食物!可是他们只知道每一个松鼠运了m个,但是某一个只松鼠运了k个,请找出这个松鼠!(本题时限3s 限制内存2M)
Input
输入有多组数据,每组第一行包含三个数n,m,k(n<=100000,1<m<=9,k<m)。
然后输入m*(n-1)+k个数,第i个数表示运送第i个坚果的松鼠编号,编号范围在2^30以内
Output
输出这个松鼠的编号
Sample Input
3 3 2
1 2 1 2 1 2 3
3
1 2 1 2 1 2 3
3
Sample Output
3
HINT
Source
zufe院赛
刚开始用数组模拟,唉,真傻,果断爆了,后来想用set,还是错,只有位运算了,其实仔细想想,把每个数转化为二进制,然后开始一个一个加,但是这不是普通的二进制运算,1111+1111=2222,2222+1111=3333,如果一个数出现m次,那么它对应位上应该是m的倍数,就比如1111出现三次,那么就会有3333,即使有别的数会影响到这个数,也没神魔关系,因为如果这个数出现m次,当前位仍是m的倍数,如果不是的话,那就找到了出现k次的数对应的二进制位,ans加上对应的数,最后得到这个数,位运算真是挺巧妙的
#include<stdio.h>#include<string.h>int num[50];int main(){int n,m,k;while(scanf("%d%d%d",&n,&m,&k)!=EOF){int t;memset(num,0,sizeof(num));for(int i=0;i<m*(n-1)+k;i++){scanf("%d",&t);for(int j=0;j<31;j++)//二进制转换 {num[j]+=t%2;t/=2;}}long long ans=0;for(int i=0;i<31;i++){if(num[i]%m==0) continue;elseans+=1<<i;}printf("%lld\n",ans);}return 0;}
0 0
- zzulioj--1832--贪吃的松鼠(位运算好题)
- ZZULIOJ 1832 贪吃的松鼠 (位运算)
- zzulioj 1832: 贪吃的松鼠 (字符串排序)
- 【zzuliOJ】1893 - 985的数学难题(位运算)
- zzulioj 1893 位运算
- zufeoj 2350 贪吃的松鼠
- ZZULIOJ Problem 1893: 985的数学难题 【位运算】
- 【zzuliOJ】1922 - 棋子问题(bfs & 位运算)
- zzulioj--1816--矩形(好题数学)
- ★ZZULIoj--1870(枚举好题)
- ZZULIOJ 1921: B 【dp + 位运算】
- 【bzoj2284】【SDOI2011】贪吃蛇【搜索】【位运算】【卡常大法好】
- hihoCoder 1513 : 小Hi的烦恼 位运算好题
- 校OJ 1038贪吃松鼠的两种解法
- zoj--3870--Team Formation(位运算好题)
- HDU - 5666 Segment (大数位运算)好题
- 1042 - Secret Origins (位运算好题)
- 【哈工大oj】1037 - 组合数末尾的零(位运算,好题)
- GCD编程中串行、并行、同步、异步的执行顺序
- ORB-SLAM使用方法
- linux开放8082和3306端口
- Bootstrap HTML 5 文档类型
- 稀疏问题的学习
- zzulioj--1832--贪吃的松鼠(位运算好题)
- 位域http://www.nowcoder.com/questionTerminal/853a980f7db14eec87209c6a1e2d99dd
- Nginx代理以及负载均衡配置
- 使用golang的标准库搭建网站--4.关于静态资源处理的问题
- Android SharedPreferences解析
- 我的烦恼
- android插件化-绑定宿主生命周期版本
- 走好职场每一步:关于求职技巧、跳槽迷思、职场困惑
- bootstrap封装成seajs cmd模块