acdream 1023 xor按位思考
2015-08-01 20:09
295 查看
思路:记答案为ans,统计出数列A和B在某二进制某一位上有多少个1,如果个数相同,则ans那一位上为0(因为题目要求最小的满足条件的值),如果不一样(则需要考虑那一位上异或个1),则判断数列A在那一位上0的个数是否等于数列B那一位上1的个数,不等于则无解,否则,那一位上set为1,继续判断。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 31; int cnt1 ; int cnt2 ; void decompose( int num, int * a ) { int p = 0; while ( num ) { p++; if ( num & 1 ) { a[p]++; } num >>= 1; } } int main () { int n, tmp; while ( scanf("%d", &n) != EOF ) { memset( cnt1, 0, sizeof(cnt1) ); for ( int i = 0; i < n; i++ ) { scanf("%d", &tmp); decompose( tmp, cnt1 ); } memset( cnt2, 0, sizeof(cnt2) ); for ( int i = 0; i < n; i++ ) { scanf("%d", &tmp); decompose( tmp, cnt2 ); } int ans = 0; bool flag = true; for ( int i = 1; i < N; i++ ) { if ( cnt1[i] == cnt2[i] ) continue; if ( cnt1[i] + cnt2[i] == n ) { ans += ( 1 << ( i - 1 ) ); } else { flag = false; break; } } if ( !flag ) { ans = -1; } printf("%d\n", ans); } return 0; }
相关文章推荐
- 字符串是否为空
- java web系统架构设计需要解决的几个问题
- LeetCode#18 4 Sum
- MyBatis学习系列十:Spring集成
- 安装python
- java多线程4--死锁
- javascript是什么?
- HDU 4334 Trouble(hash + 枚举)
- 【Android常识】Android之父Andy Rubin:被乔布斯羡慕嫉妒的天才
- Qt 学习之路 2 --- 读书笔记
- Android 给按钮添加监听事件
- Word Maze 单词迷宫
- tesseract-OCR字符识别引擎使用入门
- cinnamon桌面安装在其他目录下
- hdoj.5120 Intersection【计算几何-两圆相交面积】 2015/08/01
- 判断输入的字符串中,大小写字母和数字的个数
- hdu 2059 龟兔赛跑 DP
- ARM—使用FTP服务访问PC—FTP服务器笔记
- Objective-C语法之代码块(block)的使用
- 将一个字符串转换成首字符大写,其他小写