E - Teams

 1 /*
 2 n个学校,第i个有 个参赛者,一个队伍k个人,每个队伍所有人必须来自同一学校,
 3 求k使得队伍数量m最少。
 4 因为k必须整除每个学校的参赛者数量
 5 直接用gcd
 6 */
 7 #include <bits/stdc++.h>
 8 using namespace std;
 9 int gcd(int a,int b)
10 {
11      return b ? gcd(b,a%b) : a;
12 }
13 int main()
14 {
15     int n;
16     scanf("%d",&n);
17     while(n--)
18     {
19         int m;
20         int num[1010];
21         scanf("%d",&m);
22         for(int i=0;i<m;i++)
23             scanf("%d",&num[i]);
24         if(m==1)
25         {
26             printf("%d 1\n",num[0]);
27             continue;
28         }
29         int b=gcd(num[0],num[1]);
30         for(int i=2;i<m;i++)
31             b=gcd(b,num[i]);
32         int sum=0;
33         for(int i=0;i<m;i++)
34             sum=sum+num[i]/b;
35         printf("%d %d\n",b,sum);
36     }
37 }

 

posted @ 2017-07-20 22:56  Kearon  阅读(296)  评论(0编辑  收藏  举报