Magic Potion

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 488    Accepted Submission(s): 287

Problem Description
In a distant magic world, there is a powerful magician aswmtjdsj. One day,aswmtjdsj decide to teach his prentice ykwd to make some magic potions. The magic potion is made by 8 kinds of materials, what aswmtjdsj need to do is to tell ykwd how many each kind of materials is required. In order to prevent others from stealing these formulas, he decide to encrypt the formula. Assuming the amount of the eight kinds of materials are x1, x2, ... x8, aswmtjdsj will use a number m to encrypt, and finally tell ykwd nine numbers:x1 xor m, x2 xor m ,...., x8 xor m, (x1 + x2 +...+ x8) xor m . ykwd is too lazy,however,to calculate the value of the number m, so he asks you to help him to find the number m.

 
Input
The first line is an integer t, the number of test cases.
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.
 
Output
For each test case you should output the value of m in a single line, you can assume that 0 <= m <= 231-1.
 
Sample Input
2
1 2 3 4 5 6 7 8 36
5 5 5 5 5 5 5 5 123
 
Sample Output
0
11

Hint

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的更多相关文章

  1. 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 ...

  2. Magic Potion(最大流,跑两遍网络流或者加一个中转点)

    Magic Potion http://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjin ...

  3. Gym101981I Magic Potion(最大流)

    Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...

  4. HDU 4149 Magic Potion

    意甲冠军: a[i] ^ x = f[i] ( i = 1...8 ) 和 ( a[1] + a[2] + ... + a[8] ) ^ x = f[9] 如今f为已知  求x 思路: 从低位到高位确 ...

  5. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

  6. 2018 ACM/ICPC 南京 I题 Magic Potion

    题解:最大流板题:增加两个源点,一个汇点.第一个源点到第二个源点连边,权为K,然后第一个源点再连其他点(英雄点)边权各为1,然后英雄和怪物之间按照所给连边(边权为1). 每个怪物连终点,边权为1: 参 ...

  7. 2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)

    http://codeforces.com/gym/101981/attachments 题意:有n个英雄,m个敌人,k瓶药剂,给出每个英雄可以消灭的敌人的编号.每个英雄只能消灭一个敌人,但每个英雄只 ...

  8. Magic Potion(网络流)

    原题链接 2018南京的铜牌题,听说学长他们上来就A了,我这个图论选手也就上手做了做,结果一言难尽...... 发此篇博客希望自己能牢记自己的菜... 本题大意:有n个heros和m个monsters ...

  9. 2018icpc南京/gym101981 I Magic Potion

    题意: 若干个勇士,每个勇士只能杀特定的怪物.每个勇士只能杀1个怪,但是有一些药,喝了药之后能再杀一个,每个勇士只能喝一瓶药.问你最多杀多少怪. 题解: 按照如下建图套网络流板即可. 网上有题解说套D ...

随机推荐

  1. 【编程技巧】addSubview和insertSubview的区别

    addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subviews count 即 [view addSubview:onev ...

  2. Android查缺补漏(View篇)--事件分发机制源码分析

    在上一篇博文中分析了事件分发的流程及规则,本篇会从源码的角度更进一步理解事件分发机制的原理,如果对事件分发规则还不太清楚的童鞋,建议先看一下上一篇博文 <Android查缺补漏(View篇)-- ...

  3. xml报错 Parse Fatal Error :在实体引用中,实体名称必须紧跟在'&'后面

    修改jndi配置文件中的密码后,重启tomcat报错如下  实际问题是xml中默认’&’是非法字符,用     &   替代

  4. js计算元素距离顶部的高度及元素是否在可视区判断

    前言: 在业务当中,我们经常要计算元素的大小和元素在页面的位置信息.比如说,在一个滚动区域内,我要知道元素A是在可视区内,还是在隐藏内容区(滚动到外边看不到了).有时还要进一步知道,元素是全部都显示在 ...

  5. Linuxc - gdb调试程序

    指针实现变量交换值 #include <stdio.h> void change(int *a,int *b) { int tmp = *a; *a = *b;// 将指针a所在地址的值, ...

  6. 2017-07-06(grep man apropos )

    grep 格式 grep [选项]  字符串  文件名 选项 -i 忽略大小写 -v 排除指定字符串 作用 在文件中查找字符串 例子 grep  "size"  anaconda- ...

  7. django url路由参数错误

    出现错误: TypeError get() got an unexpected keyword argument 'teacher_id 出错原因: view类中,get方法获得了一个多余的额参数,这 ...

  8. python_7_列表

    什么是列表? --一种数据类型 -- 形式:[值1,值2,[值a,值b],值3]      --可以嵌套 #!/usr/bin/python3 list_a = [1, 2, [3, 'a']] 对于 ...

  9. MYSQL 5.7 修改密码、登录问题

    mysql5.7 关于密码问题 报错: ERROR 1862 (HY000): Your password has expired. To log in you must change it usin ...

  10. 禁止img图片拖动在新窗口打开

    JS function imgdragstart(){return false;} for(i in document.images)document.images[i].ondragstart=im ...