zoukankan      html  css  js  c++  java
  • [CF1477A] Nezzar and Board

    [CF1477A] Nezzar and Board - 结论,裴蜀定理

    Description

    原本黑板上写着 (n) 个数,先在每次操作可以选取其中两个数 (x,y),并写上 (2x-y) 而选取的数不会消失。问最终能否在黑板上写下 (k)

    Solution

    手玩发现,通过不断地 2x-y,恰好可以凑出所有系数和为 1 的形式

    相当于是随便选一个数,加上任意一个系数和为 0 的形式

    差分一下,(d_i = a_{i+1} - a_i),那么 (d_1,...,d_{n-1}) 的任意线性组合,恰好可以得到上述所求

    而任意线性组合能否得到一个数,根据裴蜀定理,我们只需要检查是否存在 i 使得 (k-a_i) 是 gcd 的倍数即可

    注意到我们可以通过 d 组合把一个数换为另一个数,所以 i 的选取其实是任意的,选取任何一个来检查即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
        {
            int n, k;
            cin >> n >> k;
    
            vector<int> a(n + 2);
            for (int i = 1; i <= n; i++)
                cin >> a[i];
    
            int g = 0;
            for (int i = 2; i <= n; i++)
                g = __gcd(g, a[i] - a[i - 1]);
    
            cout << ((k - a[1]) % g == 0 ? "YES" : "NO") << endl;
        }
    }
    
  • 相关阅读:
    BDB c++例子,从源码编译到运行
    Linux的nm查看动态和静态库中的符号
    转:js包装DOM对象
    svn笔记4属性Properties
    c++ 友元函数
    转:js包装DOM对象
    整除规则(原理,性质)
    回溯法求幂集
    转:Javascript继承机制的设计思想
    javascript prototype __proto__区别
  • 原文地址:https://www.cnblogs.com/mollnn/p/14460148.html
Copyright © 2011-2022 走看看