hdu4149 Magic Potion
Magic Potion
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 488 Accepted Submission(s): 287
Each of the next t lines contains 9 integers, respectively, x1 xor m, x2 xor m ,...., x8 xor m, (x1 + x2 +...+ x8) xor m, each of the 9 numbers is less or equal to 231-1.
1 2 3 4 5 6 7 8 36
5 5 5 5 5 5 5 5 123
11
The XOR operation takes two bit patterns of equal length and performs the logical XOR operation on each pair of corresponding bits.
The result of each digit is 1 if the two bits are different, and 0 if they are the same.
For example:
0101 (decimal 5)
XOR 0011 (decimal 3)
= 0110 (decimal 6)
//x << N: 左移N位就相当于原数乘以2的N次方; x >> N : 右移N位 就相当于原数除以2的N次方。
//x 异或 m,设 y = x << m, 即 y 就等于将x 左移(<<) m 位 ,这点很重要!
//设原来的数字为 xi 与 m 异或后 xi ^m = bi(1 <= i <= 9), (x1+x2+...+x8)^ m = b9 相当于(b1+b2+...+b8) = b9;
//因此 将(b1+b2+...+b8) 每一位与b9的每一位比较,若不相同, 即 意味着原数向左移了 j 位 ,将移动的位数相加即为 m的值
//很容易想到 若xi没有移位的话, (b1+b2+...+b8)^m == b9
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int t;
int sum, m, tmp;
cin >> t;
while(t--)
{
int r[10];
for(int i = 1; i <= 9; i++)
{
cin >> r[i];
}
sum = m = 0;
for(int j = 0; j <= 31; j++)
{
tmp = 0;
for(int k = 1; k <= 8; k++)
{
tmp += r[k]>>j&1; //(r[k] / 2^j) & 1, 与m异或后的八个数的和 从右至左 取出它的值,与第九个数的第j位比较
}
if((sum + tmp)%2 != (r[9]>>j&1))//若不同,将其转换为原数的第i位具有的值, 再求出它的进位值 ,并将m加上 (1左移相应的位数 j )
{
tmp = 8 - tmp;
sum = (sum + tmp) / 2;
m += 1 << j;
}
else
{
sum = (sum + tmp) / 2;//若相同 将进位的用sum加上去,继续下一位
}
}
cout << m << endl;
}
return 0;
}
hdu4149 Magic Potion的更多相关文章
- Gym 101981I - Magic Potion - [最大流][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem I]
题目链接:http://codeforces.com/gym/101981/attachments There are n heroes and m monsters living in an isl ...
- Magic Potion(最大流,跑两遍网络流或者加一个中转点)
Magic Potion http://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjin ...
- Gym101981I Magic Potion(最大流)
Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...
- HDU 4149 Magic Potion
意甲冠军: a[i] ^ x = f[i] ( i = 1...8 ) 和 ( a[1] + a[2] + ... + a[8] ) ^ x = f[9] 如今f为已知 求x 思路: 从低位到高位确 ...
- Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流
题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...
- 2018 ACM/ICPC 南京 I题 Magic Potion
题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...
- 2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)
http://codeforces.com/gym/101981/attachments 题意:有n个英雄,m个敌人,k瓶药剂,给出每个英雄可以消灭的敌人的编号.每个英雄只能消灭一个敌人,但每个英雄只 ...
- Magic Potion(网络流)
原题链接 2018南京的铜牌题,听说学长他们上来就A了,我这个图论选手也就上手做了做,结果一言难尽...... 发此篇博客希望自己能牢记自己的菜... 本题大意:有n个heros和m个monsters ...
- 2018icpc南京/gym101981 I Magic Potion
题意: 若干个勇士,每个勇士只能杀特定的怪物.每个勇士只能杀1个怪,但是有一些药,喝了药之后能再杀一个,每个勇士只能喝一瓶药.问你最多杀多少怪. 题解: 按照如下建图套网络流板即可. 网上有题解说套D ...
随机推荐
- Git学习(2)-使用Git 代码将本地文件提交到 GitHub
上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...
- 如何判断NSDictionary是否包含某个键
方法一: if([[dictionary allKeys] containsObject:key){ // contains key} 方法二: if([dictionary objectFo ...
- RequireJS(一)
RequireJS: RequireJS中文网:http://www.requirejs.cn/ 解决HTML引入大量js文件导致的问题: 首先是加载的时候,浏览器会停止网页渲染,加载文件越多,网页失 ...
- 如何让a标签的下划线去掉?
在css中添加 a{ text-decoration: none; }
- HTML学习(一)
文本输出/超链接 <!--/* * @<h1></h1>到<h6></h6>六个h标签,分别表示不同大小的字体.h1最大,h6最小 * @< ...
- Java与C/C++的区别
首先应该清楚,Java是由C++发展而来的,它保留了c++的大部分内容,类似于c++,但句法更清晰,规模更小,更易学.它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之 ...
- Hibernate (二)
1 一级缓存的引入 示例: @Test public void testUpdate(){ Configuration configuration = new Configuration().conf ...
- cell数组
问题: (注意,matlab判断一个数的类型的函数是class(var)) 如果p为一个数,那么h(1)=p,是没有问题的. 如果p为一个向量,那么h(1,:)=p是没有问题的. 如果p是一个矩阵的 ...
- 【转】matlab针对不同格式文件的读写
本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...
- adb命令介绍与使用
DB的概念 adb的全称为Android Debug Bridge,是起到调试桥的作用.通过adb,我们可以在ecplise中方便的通过DDMS来调试Android程序,其实他就是一个debug工具. ...