暑假作业竟然如此芳香(hdu4144模拟水题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4144
题意就是有这么一种加密方式(不知道哪个弟弟会用这种显而易见的东西)。字母表中每一个字母都可以用数字来哈希,比如A对应0,B对应1,C对应2。对于一个字符串
例如ABC,先把字符串中每个字母按照其对应的哈希值编码,变成123,再把每个数字按照五位二进制数展开,得到000010001000011,规定0用任意大写字母代替,1用任意数字代替
从的得到加密后的串ABCD1ABC1ABCD11(不唯一,逃),现在题目给加密后的串,要求按照以上规则反推出原串。
思路:直接按照规则,每次处理5个字符,就酱紫。
代码如下:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 10000+5; 4 char ans[maxn]; 5 int main(){ 6 int t; 7 while(~scanf("%d",&t)){ 8 scanf("%s",ans); 9 for(int i=0;i<t;i+=5){ 10 int num=0; 11 for(int j=0;j<5;j++){ 12 if(isdigit(ans[i+j])){ 13 num+=(1<<(4-j)); 14 }else continue; 15 } 16 cout<<char(num+65); 17 } 18 cout<<endl; 19 } 20 return 0; 21 }

浙公网安备 33010602011771号