B.Cuckoo for Hashing
模拟题。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <string> #include <vector> using namespace std; #define N 50007 int a[1004],b[1004]; int main() { int n1,n2,m,i; int x,fx,tx; int tmp,tmp2; int cs = 1; while(scanf("%d%d%d",&n1,&n2,&m)!=EOF && (n1||n2||m)) { memset(a,-1,sizeof(a)); memset(b,-1,sizeof(b)); while(m--) { scanf("%d",&x); fx = x%n1; tx = 1003; if(a[fx] == -1) { a[fx] = x; continue; } tmp2 = x; while(a[fx] != -1) { tmp = a[fx]; a[fx] = tmp2; tx = tmp%n2; if(b[tx] != -1) { tmp2 = b[tx]; b[tx] = tmp; fx = tmp2%n1; } else { b[tx] = tmp; break; } } if(a[fx] == -1) a[fx] = tmp2; } printf("Case %d: ",cs++); int flag = 0; //printf("Table 1 "); for(i=0;i<n1;i++) { if(a[i] != -1) { flag = 1; break; } } if(flag) { printf("Table 1 "); for(i=0;i<n1;i++) { if(a[i] != -1) printf("%d:%d ",i,a[i]); } } flag = 0; for(i=0;i<n2;i++) { if(b[i] != -1) { flag = 1; break; } } if(flag) { printf("Table 2 "); for(i=0;i<n2;i++) { if(b[i] != -1) printf("%d:%d ",i,b[i]); } } } return 0; }
C.Playing Fair with Cryptography
模拟题,注意细节就好。遇到J的情况要及时跳走。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <string> using namespace std; #define N 50007 char mp[7][7]; char key[100003],text[100004]; int vis[28]; string RUN(string ss) { int i,j; int a,b; int c,d; string ans = ""; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(mp[i][j] == ss[0]) a = i,b = j; if(mp[i][j] == ss[1]) c = i,d = j; } } if(a == c) { int newb = (b+1)%5; ans += mp[a][newb]; int newd = (d+1)%5; ans += mp[a][newd]; return ans; } else if(b == d) { int newa = (a+1)%5; ans += mp[newa][b]; int newc = (c+1)%5; ans += mp[newc][b]; return ans; } else { int newb = d; int newd = b; ans += mp[a][newb]; ans += mp[c][newd]; return ans; } } int main() { int t,i,cs = 1,j,k; int x,y; scanf("%d",&t); getchar(); while(t--) { gets(key); gets(text); int len1 = strlen(text); int len2 = strlen(key); memset(vis,0,sizeof(vis)); k = 0; for(i=0;i<len2;i++) { char ch = key[i]; if((ch >= 'A' && ch <= 'Z')) { if(vis[ch-'A']) continue; vis[ch-'A'] = 1; mp[k/5][k%5] = ch; k++; } else if(ch >= 'a' && ch <= 'z') { ch -= 32; if(vis[ch-'A']) continue; vis[ch-'A'] = 1; mp[k/5][k%5] = ch; k++; } } for(char chh = 'A';chh<='Z';chh++) { if(chh == 'J') continue; if(!vis[chh-'A']) { mp[k/5][k%5] = chh; k++; } } //alpha table established char ss[100004]; k = 0; for(i=0;i<len1;i++) { if(text[i] >= 'A' && text[i] <='Z') ss[k++] = text[i]; else if(text[i] >= 'a' && text[i] <= 'z') ss[k++] = text[i]-32; } ss[k] = '