ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #698 (Div. 2) D. Nezzar and Board 裴蜀定理

2021-01-29 15:03:45  阅读:235  来源: 互联网

标签:Nezzar const int 698 Codeforces a1 a3 差值 ll


https://codeforces.ml/contest/1478/problem/D

目录

题意

黑板上有n个数,你可以任选两个数x,y,然后将2x-y写到黑板上,问k是否能被写到黑板上

分析

我们将2x-y拆开来看一下,x+x-y相当于x这个数加上他和y的差值,那么我们可以处理出所有的差值。但数据范围是1e5如果用n2 处理肯定超时,但我们发现如果我们求出了a1,a2和a2,a3的差值也就相当于求出了a3,a1的差值(a3-a2+a2-a1=a3-a1)因此我们只要处理出n-1个差值就可以了。然后根据裴蜀定理
在这里插入图片描述
那么我们求的改变值为k-a[i],同时只要这个改变值为最大公约数的整数倍,那么都满足条件,最后枚举一遍a[i]即可。

Code

#include <bits/stdc++.h>
using namespace std;
//#define ACM_LOCAL
typedef long long ll;
typedef pair<int, int> PII;
const int N = 2e5 + 10;
const int M = 1e6 + 10;
const ll INF = 1e18;
const double eps = 1e-4;
ll d[N];

void solve() {
    int T; cin >> T;
    while (T--) {
        ll n, k;
        cin >> n >> k;
        for (int i = 1; i <= n; i++) cin >> d[i];
        ll gcd_ = 0;
        for (int i = 2; i <= n; i++) gcd_ = __gcd(d[i]-d[i-1], gcd_);
        int f = 0;
        for (int i = 1; i <= n; i++) {
            if ((k - d[i]) % gcd_ == 0) f = 1;
        }
        if (f) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
#ifdef ACM_LOCAL
    freopen("input", "r", stdin);
    freopen("output", "w", stdout);
#endif
    solve();
}

标签:Nezzar,const,int,698,Codeforces,a1,a3,差值,ll
来源: https://blog.csdn.net/kaka03200/article/details/113384470

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有