传送门

思路:

从k = 2 * x - y ==> 2 * x = k + y ,可以看出x是k,y的中间值,则如果存在x1,x2,且x1 = x2 ± 1,则通过x1,x2可以得到所有整数,则任意的k都成立。

例如:2 3 ===>  2 3 4 ===>   1 2 3 4 ......

对于该数组A: (0 6 9 12 20),我们可以得到a[i] - a[i - 1]的数组(6,3,3,8)。

可以得到A对于元素可以表示一个集合:

a[1] -> a[1] + 6 * n

a[2] -> a[2] + 3 * n

a[3] -> a[3] + 3 * n

a[4] -> a[4] + 8 * n

而我们只需要确认,这些集合合并之后是否存在x1,x2且x1 =  x2 ± 1.

我们任取两个集合 a(x) + p * n , a(y) + q * m(n,m ∈ Z),则需要存在

  a(x) - p * n - ( a(y) + q * m ) = 1

==> q * m - p * n = 1 * (1 - a(x) + a(y)) 有解,假设右边为T,则gcd(p, m) | T,如果a[i] - a[i-1]数组中存在两个差值的gcd = 1,则一定有解。我们只需求

gcd(a[i - 1] - a[i], a[i - 2] - a[i - 1]....) = GCD判断是不是1即可,如果为1,则可以说明所有A集合合并后可以表示为 a[1] + n (n∈Z),即一定有解;如果不为1,

所有数合并的集合也可以表示为a[1] + GCD * n (n∈Z),判断k是不是属于a[1] + GCD * n的集合的一个元素即可。

当然以上是通过样例推出,不严谨,以下给出其中一个遗漏点的证明。

假设数组:

a b c d 如果 2 * b - a = key ,则

a b c key d

我们需要证明gcd(b - a, c - b, d - c) = gcd(b - a, c - b, 2 * b - a - c, d - (2 * b - a) ),通过gcd的两个性质:

①gcd(a, b, c) = gcd(a, gcd(b, c))

②gcd(a, b) = gcd(a, b - a) = gcd(a, b + a)

假设gcd(b - a, c - b, 2 * b - a - c, d - (2 * b - a) ) = T,

T = gcd(b - a, c - b,   gcd(2 * b - a - c, d - (2 * b - a)  )       )

通过  d - (2 * b - a) + (2 * b - a - c) = d - c,

T = gcd(...,  gcd(2 * b - a - c, d - c))

T = gcd(b - a, d - c,  gcd(c - b, 2 * b - a - c)   )

通过  2 * b - a - c - (c - b) = b - a

T = gcd(b - a , c - b, c - d),所以左边=右边。

 1 #include <bits/stdc++.h>
2
3 using namespace std;
4 #define ll long long
5
6 const int N = 3e5 + 10;
7 ll a[N];
8
9 void solve()
10 {
11 int T;
12 cin >> T;
13 while(T--) {
14 int n;
15 ll k;
16 cin >> n >> k;
17 for(int i = 1; i <= n; ++i) cin >> a[i];
18 ll gcd = 0;
19 for(int i = 2; i <= n; ++i) {
20 gcd = __gcd(gcd, a[i] - a[i - 1]);
21 }
22 if(abs(a[1] - k) % gcd) cout << "NO" << endl;
23 else cout << "YES" << endl;
24 }
25 }
26
27 int main(){
28
29 ios::sync_with_stdio(false);
30 cin.tie(0); cout.tie(0);
31 solve();
32
33 return 0;
34 }

CF 1477A. Nezzar and Board的更多相关文章

  1. 2021.07.20 CF1477A Nezzar and Board(最大公因数,未证)

    2021.07.20 CF1477A Nezzar and Board(最大公因数,未证) CF1477A Nezzar and Board - 洛谷 | 计算机科学教育新生态 (luogu.com. ...

  2. CF1477A Nezzar and Board

    考虑 \(2x - y\) 我们改为 \(x + (x - y)\) 是一个更好的形式. 我们可以表示一个数为\(x_i + \sum_{j,k}(x_j - x_k) = K\) 我们考虑移到 \( ...

  3. CF#335 Board Game

    Board Game time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input ...

  4. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

  5. 【打CF,学算法——二星级】Codeforces Round #313 (Div. 2) B. Gerald is into Art(水题)

    [CF简单介绍] 提交链接:http://codeforces.com/contest/560/problem/B 题面: B. Gerald is into Art time limit per t ...

  6. 移植MarS Board代码到内核3.0.35

    MarS Board提供的出厂Linux内核是3.0.15的.而Freescale的BSP都早已经更新到3.0.35.为了跟上节奏,我花了点时间把关于marsboard代码从3.0.15移植到了Fre ...

  7. ATC/TC/CF

    10.25 去打 CF,然后被 CF 打了. CF EDU 75 A. Broken Keyboard 精神恍惚,WA 了一发. B. Binary Palindromes 比赛中的憨憨做法,考虑一个 ...

  8. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  9. [LeetCode] Battleships in a Board 平板上的战船

    Given an 2D board, count how many different battleships are in it. The battleships are represented w ...

随机推荐

  1. MongoDB 总结

    目录 1. 逻辑结构 2. 安装部署 2.1 系统准备 2.2 mongodb安装 2.2.1 创建所需用户和组 2.2.2 创建mongodb所需目录结构 2.2.3 上传并解压软件到指定位置 2. ...

  2. CentOS7,非LVM根分区扩容步骤:

    1.查看现有的分区大小 非LVM分区,目前磁盘大小为40G,根分区总容量为40G,(是自定义分区安装的) 2.关机增加磁盘大小至100G 如果你们是vmwaer虚拟软件安装的那如下入扩容: 3.查看磁 ...

  3. 浅析Linux启动流程

    Linux系统启动流程 Linux 系统的启动,从计算机开机通电自检开始,一直到登陆系统,需要经历多个过程.了解 Linux 的启动过程,有助于了解 Linux 系统的结构,也对系统的排错有很大的帮助 ...

  4. 提供个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录 文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删 除该目录

    import java.io.IOException; import java.util.Scanner; import org.apache.hadoop.fs.*; public class G_ ...

  5. Scheduling Multithreaded Computations by Work Stealing

    steal.pdf http://supertech.csail.mit.edu/papers/steal.pdf This paper studies the problem of eciently ...

  6. IDE 阅读代码时候如何防止误触

    在 JetBrains 系列的编辑器中,点击右下角小锁图标,就可以只读防止误修改. Visual Studio 下安装 CodeMaid 插件 http://www.codemaid.net/ htt ...

  7. TCP/IP网络中的显式拥塞通告(ECN)

    当前的TCP 实现将TCP 端节点之间的中间网络视为一个不透明的"黑盒".TCP 包进入和流出这个盒子.有些时候进入盒子的包被丢失了.因为今天的数字和光媒体上出现比特级错误的机会非 ...

  8. dp - 斜率优化笔记

    (原来的题解没得了,只好重写一份) 斜率优化一般是,\(dp\) 是枚举一个 \(i\),然后前面找一个 \(j\),式子中有些和 \(j\) 有关,有些和 \(i\) 有关,有些和俩都有关. 过程中 ...

  9. XCTF-easyjni

    前期工作 查壳无壳 逆向分析 文件结构 MainActivity代码 public class MainActivity extends c { static { System.loadLibrary ...

  10. 封装验证blue事件插件

    (function ($) { $.fn.checkForm = function (options) { var root = this; //将当前应用对象存入root var isok = fa ...