Codeforces Round #587 (Div. 3) Swords (gcd)

題目鏈接

題意:地下室有相同數目各種不同類型的劍,一羣人盜劍,每人只能拿一種類型的劍,且每人拿劍數目相同,至少有一種劍未被盜,已知n種劍,和地下室被盜之後各種劍數目,求最少多少人盜劍,每人盜幾把。

思路:

求被盜各種劍的最大公約數。

代碼如下:

#include<bits/stdc++.h>
#define ll long long 
#define N 200010
using namespace std;
int a[N];
int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}
int main(){
	int n,maxx=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		if(maxx<a[i])maxx=a[i];
	}
	int i=0,t;
	ll ans=0;
	for(i=0;i<n;i++){
		if(maxx-a[i]!=0){
			t=maxx-a[i];break;
		}
	}
	ans+=t;
	for(i++;i<n;i++){
		if(maxx-a[i]!=0){
			t=gcd(maxx-a[i],t);
			ans+=(maxx-a[i]);
		}
	}
	ans/=t;
	printf("%I64d %d",ans,t);
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章