题目链接:https://codeforces.com/problemset/problem/1458/A
这道题比较考察对辗转相除法的理解.
对于gcd的题目,gcd(a,b)=gcd(a,b-a)是一个很常见的trick,知道这个性质即可秒杀本题.gcd也可以像前缀和那样来维护
还需要注意一个细节,由于a[i]-a[i-1]有可能出现负数,所以要先排序.
记得开longlong
inline ll gcd(ll a, ll b){return b == 0 ? a : gcd(b, a % b);}//gcd(a,b)=gcd(a,b-a)(b>a);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
vector<ll> a(n+1);
vector<ll> b(m+1);
ll res=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a.begin(),a.end());
for(int i=2;i<=n;i++)
{
res=gcd(a[i]-a[i-1],res);
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
}
for(int i=1;i<=m;i++)
{
cout<<gcd(res,a[1]+b[i])<<' ';
}
}
标签:vector,gcd,int,ll,CF1458A,tie,Row,GCD
From: https://www.cnblogs.com/captainfly/p/18233808