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.
Input
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
Output a single integer — the answer to the problem.
Sample test(s)
Input
10 5 0 21 53 41 53
Output
4
Input
5 5 0 1 2 3 4
Output
-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; }