P5887-Ringed Genesis【GCD】

自作多情 提交于 2020-01-04 02:07:09

正题

题目链接:https://www.luogu.com.cn/problem/P5887?contestId=24709


题目大意

nn个洞围成一个环,兔子每次会往前跳kk个洞,mm只兔子给出其实位置,求有多少个洞不会被经过。


解题思路

我们可以发现kx+ny=ckx+ny=c,有cgcd(k,n)c|gcd(k,n)

那么对于每个兔子的起点pp,可以覆盖任何zgcd(k,n)+p(zN)z*gcd(k,n)+p`在这里插入代码片`(z\in N),所以我们开一个大小为gcd(k,n)gcd(k,n)的桶就好了。


codecode

#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);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!