1078. Hashing
发布日期:2021-11-16 18:49:30 浏览次数:7 分类:技术文章

本文共 1589 字,大约阅读时间需要 5 分钟。

Tips:

  • 说到此题真是略显辛酸.3月份做这题的时候犯过错,现在又犯了同样的错.务必看清题目啊,题目说的很清楚,用平方探测法处理冲突,怎么就是不长眼呢?
  • 素数的计算.也挺久没遇到素数了,突然一下子忘了2是不是素数,然后想当然的认为它不是.以后碰到这种问题得好好思考思考,网上查查,确认之后再写.不然写到后面把前面的问题给忽略了,就会一直找不到错误在哪.
  • C/C++的一些基本的原理还是没高清.给数组开辟新空间后如果没释放掉,后面再给它开辟新空间的话,可能会引用旧的地址空间,而且旧的数据也还在.而我继续想当然地认为new之后数组各位都为0.后来尝试过delete[],发现不起作用,于是用笨方法,每位设为0.
  • 最后就是注意最后一个输出不要有空格.
  • 心好累,慢慢捡起来吧.
#include 
int getPrime(int size){ int i,k; if(size < 3) return 2; if(size == 3) return 3; while(true){ k = size / 2; for(i = 2;i <= k;i ++){ if(size % i == 0) break; } if(i > k) return size; ++size; }}int main() { int size,n,num,extra,i,j,k; int *hash,*loc; while(scanf("%d %d",&size,&n) != EOF) { if(n == 0) continue; size = getPrime(size); hash = new int[size]; loc = new int[n]; for(i = 0;i < size;i++) hash[i] = 0; for(i = 0;i < n;i++) loc[i] = 0; for(i = 0;i < n;i++){ scanf("%d",&num); extra = num % size; for(j = extra,k = 0;k < size ;j = (extra + k * k) % size){ if(hash[j] == 0) { loc[i] = j; hash[j] = 1; break; } k++; } if(k >= size ) loc[i] = -1; } printf("%d",loc[0]); for(i = 1;i < n;i++){ if(loc[i] == -1) printf(" -"); else printf(" %d",loc[i]); } printf("\n"); } return 0;}

转载地址:https://blog.csdn.net/Thare_Lam/article/details/49129839 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:1079. Total Sales of Supply Chain
下一篇:1077. Kuchiguse

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月02日 23时50分59秒