加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

hdu 1287(异或运算的逆运算)

(2013-01-16 09:23:28)
标签:

杂谈

分类: ACM数论

其实这题只要知道:

A xor B = C

则 A xor C = B (这个是显然的,(1 ^ 0 =1)-> (1 ^ 1=0)  ,(1^1=0)->(1^0=1) 其实异或运算的性质很多都是直接根据1 0 的运算性质来的)

然后就有 B xor C = A

 

然后就可以破译猪头帮的密码的,先把密码异或一下看是不是都是大写字母, 至于可能有重复情况就不知道怎么弄了。。。

 

破译密码

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2506    Accepted Submission(s): 1123


Problem Description
有个叫“猪头帮”的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符;现在还知道他们加密的方法是:只用一个大写字母和原文进行异或运算生成密文。请你帮忙解开。
 


 

Input
有若干组,每组输入有2行,第一行整数N表示有N个密文,接着一行有N个整数分别表示N个密文。
 


 

Output
输出仅有大写字母组成的原文。
 


 

Sample Input
30 17 6 9 8 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 22 23 20 21 26 27 24
 


 

Sample Output
SDKJABCDEFGHIJKLMNOPQRSTUVWXYZ
 


 

Author
SmallBeer(CML)
 


 

Source
 


 

Recommend
lcy
 

#include
#include
#include
using namespace std;
int g[10010];
int main()
{
 int n;
 while(scanf("%d",&n)!=EOF)
 {
  for(int i=0;i
  {
   scanf("%d",&g[i]);
  }
  int flag=0;
  char c;
  for(c='A';c<='Z';c++)
  {
   flag=0;
   for(int i=0;i
   {
    if((g[i]^c)>='A'&&(g[i]^c)<='Z')
    {
     flag++;
    }
   }
   if(flag==n) break;
  }
  for(int i=0;i
   printf("%c",g[i]^c);
  printf("\n");
 }
 return 0;
}
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有