题解 CF1216D 【Swords】
作者:互联网
大水题,感觉比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; }
标签:gcd,题解,ll,Swords,long,while,inline,CF1216D,getchar 来源: https://www.cnblogs.com/wyzwyz/p/11565230.html