5123: 分糖果
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 26 Solved: 16
[Submit][Status][Web Board]
Description
旧的一年过去,小明的生日(1月11号,小光棍节)又快到了,作为母胎单身的他打算脱单,于是他便准备开一个party来暗中相亲(想想都知道不可能成功的)。他为了能吸引到更多的女生,于是事先准备了好多糖果,准备派发给来party的每个人。可是一个难题摆在了他面前,他现在还无法确定到时候究竟会有多少人来,于是他为了糖果能被平分,就先去调查了一下能到场人数的可能性。
他收集到了nn种可能,现在他需要你的帮助,帮他看看他到底需要准备多少糖果,可以使得最后的糖果都被平分而没有剩余。
Input
第一行只有一个数字T,代表了有T组测试。
每组测试的第一行只有一个数n,代表了有n种可能。
第二行有n个数字ai,代表了其中可能来的人数。
题目保证所有的输入数据以及答案在int的范围之内,n≥1。
Output
对于每组测试,输出小明最少需要准备的糖果数。
Sample Input
1
2
6 15
Sample Output
30
HINT
lcm(a, b) = a * b / gcd(a, b)
Code
暴力求解
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
ll a[100005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
ll num=a[2]-a[1];
for(int i=2;i<=n;i++)
{
num=__gcd(a[i]-a[i-1],num);
}
printf("%lld\n",num);
}
return 0;
}