码迷,mamicode.com
首页 > 其他好文 > 详细

题解 CF1216D 【Swords】

时间:2019-09-21 22:57:56      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:代码   clu   printf   def   return   getc   getchar   lin   line   

大水题,感觉比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;
}

题解 CF1216D 【Swords】

标签:代码   clu   printf   def   return   getc   getchar   lin   line   

原文地址:https://www.cnblogs.com/wyzwyz/p/11565230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!