正题
题目链接:https://www.luogu.com.cn/problem/P5887?contestId=24709
题目大意
nnn个洞围成一个环,兔子每次会往前跳kkk个洞,mmm只兔子给出其实位置,求有多少个洞不会被经过。
解题思路
我们可以发现kx+ny=ckx+ny=ckx+ny=c,有c∣gcd(k,n)c|gcd(k,n)c∣gcd(k,n)。
那么对于每个兔子的起点ppp,可以覆盖任何z∗gcd(k,n)+p‘在这里插入代码片‘(z∈N)z*gcd(k,n)+p`在这里插入代码片`(z\in N)z∗gcd(k,n)+p‘在这里插入代码片‘(z∈N),所以我们开一个大小为gcd(k,n)gcd(k,n)gcd(k,n)的桶就好了。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,z,p,ans;
bool v[1100000];
int main()
{scanf("%d%d%d",&n,&m,&k);z=__gcd(n,k);for(int i=1;i<=m;i++){scanf("%d",&p);v[p%z]=1;}for(int i=0;i<z;i++)if(!v[i]) ans+=n/z;printf("%d",ans);
}