题解 CF1216D 【Swords】

匿名 (未验证) 提交于 2019-12-03 00:11:01

大水题,感觉比C题水多了。。。

题目大意:给你$n$个数,求这$n$个数的$gcd$(最大公约数)

没有什么好说的了,注意特判$gcd$为$0$的情况,还有,提示一下:要开$long$ $long$!

代码如下:

#include<cstdio> #define ll long long  inline ll read(){ 	ll r=0,f=1; 	char c=getchar(); 	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} 	while(c>='0'&&c<='9')r=(r<<1)+(r<<3)+c-'0',c=getchar(); 	return r*f; }  ll n,a[200002],Max,Min=1e9+10,y,z;  ll gcd(ll a,ll b){ 	return b?gcd(b,a%b):a; }  inline ll max(ll a,ll b){ 	return a>b?a:b; }  inline ll min(ll a,ll b){ 	return a<b?a:b; }  int main(){ 	n=(int)read(); 	for(int i=1;i<=n;i++){ 		a[i]=read(); 		Max=max(Max,a[i]); 		Min=min(Min,a[i]); 	} 	z=Max-Min; 	for(int i=1;i<=n;i++){ 		if(Max==a[i])continue; 		z=gcd(z,Max-a[i]); 	} 	if(!z){ 		printf("0 0"); 		return 0; 	} 	for(int i=1;i<=n;i++)y+=(Max-a[i])/z; 	printf("%lld %lld",y,z); 	return 0; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!