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 @   Captainfly19  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示