题目链接:点击打开链接
预处理出26个字母互相异或的值,然后搜索。
结果数组要开到10000。
代码:
#include <iostream> #include <cstdio> using namespace std; int Hash[30][30]; char res[10000]; int a[10000]; void init(){ for(int i='A';i<='Z';i++){ for(int j='A';j<='Z';j++){ Hash[i][j]=i^j; } } } int main(){ init(); int N; while(cin>>N){ for(int i=1;i<=N;i++){ scanf("%d",&a[i]); } int i,j,k; for(i='A';i<='Z';i++){ for(j=1;j<=N;j++){ for(k='A';k<='Z';k++){ if(Hash[i][k]==a[j]){ res[j]=char(k); break; } } if(k>'Z') break; } if(j>N) break; } for(i=1;i<=N;i++){ cout<<res[i]; } cout<<endl; } return 0; }