CF1458A Row GCD

题目链接: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])<<' ';
    }
    
}
posted @ 2024-06-05 21:07  Captainfly19  阅读(2)  评论(0编辑  收藏  举报