acdream 1023 xor按位思考

思路:记答案为ans,统计出数列A和B在某二进制某一位上有多少个1,如果个数相同,则ans那一位上为0(因为题目要求最小的满足条件的值),如果不一样(则需要考虑那一位上异或个1),则判断数列A在那一位上0的个数是否等于数列B那一位上1的个数,不等于则无解,否则,那一位上set为1,继续判断。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5
 6 const int N = 31;
 7 int cnt1[N];
 8 int cnt2[N];
 9
10 void decompose( int num, int * a )
11 {
12     int p = 0;
13     while ( num )
14     {
15         p++;
16         if ( num & 1 )
17         {
18             a[p]++;
19         }
20         num >>= 1;
21     }
22 }
23
24 int main ()
25 {
26     int n, tmp;
27     while ( scanf("%d", &n) != EOF )
28     {
29         memset( cnt1, 0, sizeof(cnt1) );
30         for ( int i = 0; i < n; i++ )
31         {
32             scanf("%d", &tmp);
33             decompose( tmp, cnt1 );
34         }
35         memset( cnt2, 0, sizeof(cnt2) );
36         for ( int i = 0; i < n; i++ )
37         {
38             scanf("%d", &tmp);
39             decompose( tmp, cnt2 );
40         }
41         int ans = 0;
42         bool flag = true;
43         for ( int i = 1; i < N; i++ )
44         {
45             if ( cnt1[i] == cnt2[i] ) continue;
46             if ( cnt1[i] + cnt2[i] == n )
47             {
48                 ans += ( 1 << ( i - 1 ) );
49             }
50             else
51             {
52                 flag = false;
53                 break;
54             }
55         }
56         if ( !flag )
57         {
58             ans = -1;
59         }
60         printf("%d\n", ans);
61     }
62     return 0;
63 }
时间: 2024-10-17 12:10:16

acdream 1023 xor按位思考的相关文章

ACM学习历程—HDU5269 ZYB loves Xor I(位运算 &amp;&amp; dfs &amp;&amp; 排序)(BestCoder Round #44 1002题)

Problem Description Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he wants to know the sum of all (lowbit(Ai xor Aj) (i,j∈[1,n]) We define that lowbit(x)=2^k,k is the smallest integer satisfied ((x and 2^k)>0)Specially,

ACdream 1023 抑或

Xor Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description For given multisets Aand B, find minimum non-negative xx which A⊕x=BA⊕x=B Note that for A={a1,a2,…,an}A={a1,a2,…,an

组合博弈入门

人生有“三晃”:一晃大了,一晃老了,一晃没了.我晃一下就够了... 以下为网上搜集资料的汇总: 组合游戏定义:        1.有且仅有两个玩家    2.游戏双方轮流操作    3.游戏操作状态是个有限的集合(比如:取石子游戏,石子是有限的,棋盘中的棋盘大小的有限的)  4.游戏必须在有限次内结束  5.当一方无法操作时,游戏结束. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.     显然,如果n=m+

IPSEC-VPN技术详细讲解--特别推荐

VPN 基础篇 本章重点 什么是VPN 认识数据加/解密 数据加/解密的类型 散列算法 IPSec Base VPN Linux下的IPSec架构 本章我们要讨论这方面的议题,只不过这里所要讨论的方向是如何让企业网络的通信变得更安全. 其实,加强通信安全的方法有很多,例如,使用Modem 来拨号连接或是Frame Relay 的应用等,都可以提高网络上数据传递的安全,但就方便.经济及安全性来考虑,笔者认为VPN(VirtualPrivate Network)是其中最好的选择,但是好一点的商用版V

2019.10.16&amp;17小结

话说也蛮久没写小结了,主要这两次考试失分严重,还是总结下吧. 10.16 T1 小奇挖矿2 100/0 [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小奇最初在0号星球. 有n处矿体,第i处矿体有ai单位原矿,在第bi个星球上. 由于飞船使用的是老式的跳跃引擎,每次它只能从第x号星球移动到第x+4号星球或x+7号星球.每到一个星球,小奇会采走该星球上所有的

缺乏经验的管理者有哪些常犯错误?

这个问题源自国外网友在Quora上的提问.亚马逊 AmazonSmile 的总经理 lan McAllister 在 Quora 上对这个的回答,他列举了他初当管理者时犯的错误,或者是看到其他新任的管理者所犯的一些错误,并分享如何去避免这些问题. 下面是我初当管理者时犯的一些错误,或者是看到其他新任的管理者犯的错误.经验丰富的管理者仍然会犯一些这样的错误,然而有望少一些: 一.绩效管理 1. 处理绩效问题不及时-问题出现便一发不可收拾.早一点注意到绩效问题,你会给出善意的纠正性反馈.如果你没有及

php-运算符

1 二元运算符 + .- . * ./ . % . . 2 赋值运算符 +=.-=.*=./=.%=.^=..=.&=.|=.<<=.>>=.=& 3 比较运算符 ==.!=.>.<.>=.<=.===.!== 4 逻辑运算符 &&.and.||.or.xor 5 位运算符 &.|.^ 6 一元运算符 一元运算符操作一个操作数 7 否定运算符 !.~ 8 递增递减运算符 $var++ . ++$var .$var--

C#之枚举类型

参考: http://www.cnblogs.com/an-wl/archive/2011/04/14/2015815.html 惯例先上MSDN: https://msdn.microsoft.com/zh-cn/library/cc138362(v=vs.110).aspx 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法.例如,假设您必须定义一个变量,该变量的值表示一周中的一天.该变量只能存储七个有意义的值.若要定义这些值,可以使用枚举类型.枚举类型是使用en

FZU 2105 Digits Count(位数计算)

Description 题目描述 Given N integers A={A[0],A[1],...,A[N-1]}. Here we have some operations: Operation 1: AND opn L R Here opn, L and R are integers. For L≤i≤R, we do A[i]=A[i] AND opn (here "AND" is bitwise operation). Operation 2: OR opn L R Here