其他分享
首页 > 其他分享> > [CF1477A] Nezzar and Board - 结论,裴蜀定理

[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;
    }
}

标签:Nezzar,int,定理,选取,CF1477A,Board,任意,裴蜀
来源: https://www.cnblogs.com/mollnn/p/14460148.html