http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2719&cid=1203
题意 :意思就是哈希来的,具体大意就是说有两个哈希表,然后有这样一组数据,让你把这组数据存到这两个哈希表里,然后不能重复,先让数据往表1里存,就是对表1的长度进行取余,如果余数这个位置没有数就存上,如果有的话,就存上这个数,让原来的数再去表2里存,也是按照这个方式。就是来回踢。。。我觉得。。。。
思路:两个哈希表,一个循环找即可。。。当时做的时候把自己绕进去了。。。。

#include <stdio.h> #include <string.h> #include <map> #include <iostream> using namespace std ; int ch[1100]; int sh[1100]; int main() { int n1,n2,k ; int t = 1 ; while(scanf("%d%d%d",&n1,&n2,&k)!=EOF) { memset(ch,-1,sizeof(ch)); memset(sh,-1,sizeof(sh)) ; if(n1 == 0&&n2==0&&k==0) break; int x ; for(int i = 1 ; i <= k ; i++) { scanf("%d",&x); while(1) { int s=x%n1; if(ch[s] == -1) { ch[s]=x; break; } else { int temp=ch[s]; ch[s]=x; int tt=temp%n2; if(sh[tt]==-1) { sh[tt]=temp; break; } else { x=sh[tt]; sh[tt]=temp; } } } } printf("Case %d: ",t); t++; int flag = 0 ; for(int i = 0 ; i < n1 ; i++) { if(ch[i] != -1) { flag = 1 ; break ; } } if(flag) { printf("Table 1 "); for(int i = 0 ; i < n1 ; i++) { if(ch[i] != -1) { printf("%d:%d ",i,ch[i]) ; } } } flag = 0 ; for(int i = 0 ; i < n2 ; i++) { if(sh[i] != -1) { flag = 1 ; break ; } } if(flag) { printf("Table 2 "); for(int i = 0 ; i < n2 ; i++) { if(sh[i] != -1) { printf("%d:%d ",i,sh[i]) ; } } } } return 0 ; }
下面这个是用map做的,不厚道,直接用的二货的。

#include<cstdio> #include<cstring> #include<iostream> #include<map> using namespace std; int main() { int n1,n2,m,c,t=1; while(scanf("%d%d%d",&n1,&n2,&m)!=EOF) { map<int,int>q1; map<int,int>q2; if(n1==0&&n2==0&&m==0) break; for(int i=1; i<=m; i++) { scanf("%d",&c); while(1) { int s=c%n1; if(q1.find(s)==q1.end()) { q1[s]=c; break; } else { int cc=q1[s]; q1[s]=c; int tt=cc%n2; if(q2.find(tt)==q2.end()) { q2[tt]=cc; break; } else { c=q2[tt]; q2[tt]=cc; } } } } printf("Case %d: ",t); t++; if(!q1.empty()) { printf("Table 1 "); map<int,int>::const_iterator inter=q1.begin(); while(inter!=q1.end()) { cout<<inter->first<<':'; cout<<inter->second<<endl; inter++; } } if(!q2.empty()) { printf("Table 2 "); map<int,int>::const_iterator inter1=q2.begin(); while(inter1!=q2.end()) { cout<<inter1->first<<':'; cout<<inter1->second<<endl; inter1++; } } } return 0; }