1078. Hashing (25)

来源:互联网 发布:淘宝客服链接 编辑:程序博客网 时间:2024/06/15 23:59

原来哈希表还有二次探测的过程。。。
涨姿势涨姿势……
本来觉得自己程序对的不得了,结果最后一个点总是错
果然我还是太年轻了
AC代码

#include <bits/stdc++.h>using namespace std;int main(void){    int jt, n;    cin >> jt >> n;    int i;    bool isbreak;    while (1)    {        isbreak = true;        if (jt == 1) isbreak = false;//第二个测试点:1不是素数         for (i = 2; i <= sqrt(jt); i++)        {            if (jt % i == 0) isbreak = false;        }        if (isbreak) break;        else jt++;    }    vector <int> arr(n);    vector <bool> test(jt);    for (i = 0; i < n; i++)    {        cin >> arr[i];        int temp = arr[i] % jt;        if (!test[temp])        {            test[temp] = true;            arr[i] %= jt;        }        else//第四个测试点:二次探查。没系统学过哈希表,网上看别人代码才知道还有这个过程。。。。。         {            bool re = false;            for (int j = 0; j < jt; j++)            {                int tmp = (temp + j * j) % jt;                if (!test[tmp])                {                    test[tmp] = true;                    arr[i] = tmp;                    re = true;                    break;                }             }            if (!re) arr[i] = -1;        }    }    for (i = 0; i < n - 1; i++)    {        if (arr[i] != -1 )printf("%d ", arr[i]);        else printf("- ");    }    if (arr[i] != -1 ) printf("%d", arr[i]);    else printf("-");}
原创粉丝点击