Codeforces Round #FF (Div. 2) Problem A DZY Loves Hash

A. DZY Loves Hash
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

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


        题意:就是哈希函数h(x)=x mod p。给出n个数,问第一次出现哈希冲突出现在第几个数。哈希冲突是指,先前已经有一个数的函数值是H,又出现了一个数的函数值也是H。

        思路:模拟。开一个数组,对每个输入的数算函数值,出现了作标记,再次出现的话,就是它了。注意求的是第一次出现,不要被后来出现的覆盖了。

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <ctype.h>
#define INF 1000000000
using namespace std;

int p,n;
bool tab[500];

int main(){
	while(cin>>p>>n){
		memset(tab,0,sizeof(tab));
		int ans=0;
		for(int i=1;i<=n;i++){
			int x;
			cin>>x;
			if(!ans&&tab[x%p])ans=i;
			tab[x%p]=1;
		}
		if(ans){
			cout<<ans<<endl;
		}else{
			cout<<"-1"<<endl;
		}
	}
	return 0;
} 



你可能感兴趣的:(round,codeforces,#FF)