传送门

思路:

从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. MYSQL基础知识的复习1

    数据库(是存放数据的仓库) 1.根据存储量以及安全性上来划分: 大型数据库:DB2 Oracle(毕业) Hbase 银行 公安局(不加班 没网) 移动 中型数据库:mysql sqlserver(. ...

  2. eNSP启动设备AR1失败记一次解决步骤

    eNSP稳定版本下载:   微信搜索公众号"疯刘小三" 关注后回复ensp即可获得下载链接地址 eNSP V100R002C00B510 Setup.exe 最近在用eNSp的时候 ...

  3. 从零开始学Java (二)Hello

    1.新建Hello.java文件,写入以下内容 1 public class Hello { 2 public static void main(String[] args) { 3 System.o ...

  4. 20201101gryz模拟赛解题报告

    写在前面 2020rp++ 停课的第一场模拟赛 拿上一年的上一年的day1来考的, 结果得分期望220pts,实际135pts,rank3,太菜了 考着考着机房灯突然灭了,当时慌的一批 以为断电代码要 ...

  5. 题解 CF620E 【New Year Tree】

    有关dfs序的例题,需要有一定的位运算基础 题面 给定一个树,树上有颜色,将某一子树的颜色统一修改,求子树中颜色的数量 Solution 子树修改,子树求和,dfs序的知识(类似区间修改区间求和) 考 ...

  6. HDU2222 Keywords Search__AC自动机

    Keywords Search Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %I64d & %I64u Sub ...

  7. java线程缓存刷新的疑问

    https://www.jianshu.com/p/3c06ffbf0d52 import java.util.concurrent.TimeUnit; public class VolatileFo ...

  8. 通过Portainer统一管理不同服务器的Docker

    通过Portainer统一管理不同服务器的Docker 一.可视化管理工具Portainer的安装 二.跨服务器管理Docker 2.1开启2375监听端口 2.2Portainer配置远程管理 一. ...

  9. Linux-处理用户输入

    Linux-处理用户输入 1.命令行参数 1.2读取参数 1.3 读取脚本名 1.4测试参数 2.特殊参数变量 2.1 参数统计 2.2抓取所有的数据 3.移动变量 4.处理选项 5.选项标准化 6. ...

  10. Go语言学习笔记(3)——面向对象编程

    把存货赶紧更新一波(捂脸) 1. 类型系统 类型系统,就是说一种编程语言怎么设计的它的类型的体系结构. 比如基础类型啊,复合类型啊,一些可以指向任意对象的类型啊,以及类型的语义,面向对象的特性,接口, ...