有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号x
i
。规则是将数字为x
i
的篮球投到x
i
除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?
#include<iostream>
#include <set>
usingnamespacestd;
intmain() {
intp, n; //篮筐数,篮球数
intx, i;
while(cin >> p >> n){
intflag=0; //作用:1.判断是否有冲突 2.如果有冲突则记录第一个冲突的序号
set<int> myset; //每一批输入样例构造一个空集合
for(i=1; i<=n; i++){ //以1开始,便于这个题目处理
cin >> x;
if(myset.find(x%p)!=myset.end() && !flag) flag =
i; //注意输入示例,只记录第一次冲突的,后面再有冲突的并不记录
elsemyset.insert(x%p);
}
if(flag) cout << flag << endl; // 有冲突
elsecout << -1 << endl; // 没有冲突
}
return0;
}