这两个代码有什么区别
正确:
#include<cstdio>
typedef long long ll;
const ll Mod=1e7+5;
ll n,m,v[Mod],h[Mod],a;
void hsh(ll x){
int now=x%Mod;
while(h[now]!=x&&h[now]!=0){
now++; if(now==Mod) now=1;
}
if(!h[now]) h[now]=x,v[now]=1;
else v[now]++;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(register int i=1;i<=n/100;i++){
ll x;
scanf("%lld",&x); a=x;
for(register int j=1;j<=100;j++){
hsh(a+1);
a=(a*109+107)%m;
}
}
ll ans=0;
for(register int i=0;i<Mod;i++){
if(h[i]){
ans+=(v[i]+h[i]-1)/h[i]*h[i];
}
}
printf("%lld\n",ans);
return 0;
}
错误
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const ll Mod=1e7+5;
ll n,m;
ll v[Mod+3],h[Mod+3];
void hsh(ll x){
ll now=x%Mod;
while(h[now]!=x&&h[now]!=0){
now++; if(now>=Mod) now=1;
}
if(!h[now]) h[now]=x,v[now]=1;
else v[now]++;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(register ll i=1;i<=n/100;i++){
ll x;
scanf("%lld",&x);
for(register ll j=1;j<=100;j++){
hsh(x+1);
x=(x*109+107)%m;
}
}
ll ans=0;
for(register ll i=0;i<Mod;i++){
if(h[i]){
ans+=(v[i]+h[i]-1)/h[i]*h[i];
}
}
printf("%lld\n",ans);
return 0;
}