pat 甲級 1078(hash二次探測法)
阿新 • • 發佈:2018-11-18
題目連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592
思路:
就是有一個二次探測法的公式:hi = (h(x)+i*i)%m;
二次探索:https://blog.csdn.net/xyzbaihaiping/article/details/51607770
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 14000; int n,m,a[maxn],vis[maxn]; int is_p(int x) { if(x==1) return 0; if(x==2||x==3) return 1; for(int i=2;i*i<=x;i++) { if(x%i==0) return false; } return true; } int main(void) { int i,j,x; scanf("%d%d",&m,&n); while(is_p(m)==0) m++; for(i=0;i<n;i++) { scanf("%d",&x); if(i) printf(" "); for(j=0;j<m;j++) { if(vis[(x+j*j)%m]==0) { printf("%d",(x+j*j)%m); vis[(x+j*j)%m]=1; break; } } if(j==m) printf("-"); } printf("\n"); return 0; }
參考文章:https://blog.csdn.net/xtzmm1215/article/details/38390721