DZY has a hash table with p buckets, numbered from 0 to p - 1. He wants to insert n numbers, in the order they are given, into the hash table. For the i-th number xi, DZY will put it into the bucket numbered h(xi), where h(x) is the hash function. In this problem we will assume, that h(x) = x mod p. Operation a mod b denotes taking a remainder after division a by b.
However, each bucket can contain no more than one element. If DZY wants to insert an number into a bucket which is already filled, we say a "conflict" happens. Suppose the first conflict happens right after the i-th insertion, you should output i. If no conflict happens, just output -1.
The first line contains two integers, p and n (2 ≤ p, n ≤ 300). Then n lines follow. The i-th of them contains an integer xi (0 ≤ xi ≤ 109).
Output a single integer — the answer to the problem.
10 5 0 21 53 41 53
4
5 5 0 1 2 3 4
-1
注意数据范围p,m<=200,虽然输入的数据较大,刚开始自己mod1000000001,发现这不能有冲突了,并且还要标记下第一个发生冲突,以后的冲突可以忽略
#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<cmath> #include<algorithm> #define LL int #define inf 0x3f3f3f3f using namespace std; int ha[10002]; int bj; int main() { LL n,m,i,j,k,l; while(~scanf("%d%d",&n,&m)) { bj=0; memset(ha,0,sizeof(ha) ); for(i=1;i<=m;i++) { scanf("%d",&k); k=k%n;//对当前的输入值的个数进行% if(!ha[k]) { ha[k]++; } else if(ha[k]!=0&&!bj )//只取,符合条件的第一个<span id="transmark"></span> { bj=i; } } if(!bj) printf("-1\n"); else printf("%d\n",bj); } return 0; }