• 【PAT甲级】1078 Hashing (25 分)(哈希表二次探测法)


    题意:

    输入两个正整数M和N(M<=10000,N<=M)表示哈希表的最大长度和插入的元素个数。如果M不是一个素数,把它变成大于M的最小素数,接着输入N个元素,输出它们在哈希表中的位置(从0开始),如有冲突采取二次探测法处理冲突。

    trick:

    测试点1包含M为1的数据,1不是素数。。。

    AAAAAccepted code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[10007];
     4 int ans[10007];
     5 int vis[100007];
     6 int main(){
     7     ios::sync_with_stdio(false);
     8     cin.tie(NULL);
     9     cout.tie(NULL);
    10     int m,n;
    11     cin>>m>>n;
    12     int flag=0;
    13     for(int i=2;i*i<=m;++i)
    14         if(m%i==0){
    15             flag=1;
    16             break;
    17         }
    18     if(flag||m==1)
    19         for(int i=m+1;;++i){
    20             int flag2=0;
    21             for(int j=2;j*j<=i;++j)
    22                 if(i%j==0){
    23                     flag2=1;
    24                     break;
    25                 }
    26             if(!flag2){
    27                 m=i;
    28                 break;
    29             }
    30         }
    31     for(int i=1;i<=n;++i)
    32         cin>>a[i];
    33     for(int i=1;i<=n;++i){
    34         int tamp=a[i]%m;
    35         if(!vis[tamp]){
    36             vis[tamp]=1;
    37             ans[i]=tamp;
    38         }
    39         else{
    40             int flag3=0;
    41             for(int j=1;j<n;++j)
    42                 if(!vis[(tamp+j*j)%m]){
    43                     vis[(tamp+j*j)%m]=1;
    44                     ans[i]=(tamp+j*j)%m;
    45                     flag3=1;
    46                     break;
    47                 }
    48             if(!flag3)
    49                 ans[i]=-1;
    50         }
    51     }
    52     for(int i=1;i<=n;++i){
    53         if(ans[i]==-1)
    54             cout<<"-";
    55         else
    56             cout<<ans[i];
    57         if(i<n)
    58             cout<<" ";
    59     } 
    60     return 0;
    61 } 
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    跨域和表单重复
    Socket
    Redis(基本数据类型和使用Java操作Redis)
    初识Git
    SpringCloud一(eureka)
    SpringBoot3(springboot_jdbctemplate以及MyBatis和Dubbo整合)
    SpringBoot2(thymeleaf模板jsp页面和jpa)
    SpringBoot
    SpringBoot小型进销存系统
    MyBatis与SpringBoot整合案例
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11820671.html
Copyright © 2020-2023  润新知