題意:地下室有相同數目各種不同類型的劍,一羣人盜劍,每人只能拿一種類型的劍,且每人拿劍數目相同,至少有一種劍未被盜,已知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;
}