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 }

 

转载于:https://www.cnblogs.com/kearon/p/7215283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值