题解 CF447A 【DZY Loves Hash】

· · 题解

这一题其实可以直接用模拟。

开一个桶,边搜边处理,复杂度O(n)。

具体解释看代码:

#include<bits/stdc++.h>
#include<bitset> //速度加快近四倍
using namespace std;
bool a[301]; //开一个桶,用来存放记录
int p,n;
int main()
{
    memset(a,0,sizeof(a));
    scanf("%d%d",&p,&n);
    for(long long i=0;i<n;i++) //保险一点
    {
        int s;//临时存放输入的数
        scanf("%d",&s);
        if(a[s%p]==0)
            a[s%p]=1;//直接进行处理
        else //已经被存放过
        {
            printf("%d",i+1); //直接输出
            return 0;
        }
    }
    cout<<-1;//没有退出 
    return 0;
}

看懂了吗?

算法就是用一个桶进行纯模拟,如果有过直接输出,return 0。

管理员大大求过~~