首页 > 其他分享 >CF1477A Nezzar and Board 题解

CF1477A Nezzar and Board 题解

时间:2024-02-27 19:57:58浏览次数:25  
标签:Nezzar ch 数轴 int 题解 CF1477A while 操作

题意

  • 给出数列 \(S=\{a_i\}\) 和整数 \(k\),求是否能通过下面的操作使得 \(k\in S\)?
  • 操作:选取 \(x,y\in S\),将 \(2x-y\) 加入 \(S\) 中。

分析

  • 观察操作可以发现,\(2x-y\) 实际上就是数轴上 \(y\) 关于 \(x\) 的对称点,因此这个操作只与 \(x\) 和 \(y\) 在数轴上的相对位置有关,与具体位置(具体数值)无关。继续观察可以发现,如果 \(0\in S\),那么就会有几个很好的性质:
  1. 若 \(x\in S\),那么 \(n\cdot x\in S,n\in\mathbb{Z}\)。
  2. 若 \(x,y\in S\),那么 \(x+y\in S\)。
  • 为了可以利用这两条性质,我们可以将 \(S\) 变化为 \(S'=\{a_i-a_1\}\),并把 \(k\) 减去 \(a_1\)(就相当于将数轴平移了)。此时 \(0\in S'\),因此在无限次进行操作之后,得到的就是 \(S'\) 的整线性组合 \(S''=\{x|x=m\cdot\gcd(a_2,a_3,\cdots,a_n),m\in\mathbb{Z}\}\),判断 \(k\in S''\) 即判断 \(\gcd(a_2,a_3,\cdots,a_n)\mid k\),直接求解即可。

AC 代码

#include <bits/stdc++.h>
#define int long long
#define N 200005
using namespace std;
int n, k, a[N];

inline int read(int &x) {
	char ch = x = 0;
	int m = 1;
	while (ch < '0' || ch > '9') {
		ch = getchar();
		if (ch == '-') m *= -1;
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 1) + (x << 3) + ch - 48;
		ch = getchar();
	}
	x *= m;
	return x;
}

int gcd(int x, int y) {
	if (y == 0) return x;
	return gcd(y, x % y);
}

signed main() {
	int T;
	read(T);
	while (T--) {
		read(n), read(k);
		for (int i = 1; i <= n; i++) read(a[i]);
		sort(a + 1, a + 1 + n);
		for (int i = 2; i <= n; i++) a[i] -= a[1]; //平移数轴
		k -= a[1];
		if (k == 0) { //避免取余 k
			printf("YES\n");
			continue;
		}
		a[1] = 0;
		int g = a[2];
		for (int i = 3; i <= n; i++) g = gcd(g, a[i]); //求解 gcd
		if (k % g) printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}

标签:Nezzar,ch,数轴,int,题解,CF1477A,while,操作
From: https://www.cnblogs.com/iloveoi/p/18037745

相关文章

  • [ABC342D] Square Pair 题解
    洛谷传送门原题传送门题意给出一个数列\(A\),求出满足\(A_iA_j\)为完全平方数的无序数对\((i,j)\)的个数。分析容易想到(但是我在昨晚没想到,可以原地AFO了),对于每个数,如果是\(0\)的话可以直接统计答案(记录\(0\)的个数\(cnt\),最后\(ans\leftarrowans+cnt(n-cnt)+\f......
  • [ABC342E] Last Train 题解
    洛谷传送门原题传送门题意给出一些由\((l,d,k,c,A,B)\)描述的列车,表示每当时间为\(l,l+d,l+2d,\cdots,l+(k-1)d\)时有一半列车从\(A\)出发,经过\(c\)的时间到达\(B\)。问如果从站点\(i,i\in(0,n)\)出发要去站点\(n\),最晚什么时候到达站点\(i\)可以去到站点\(n\)......
  • [ABC342C] Many Replacement 题解
    洛谷传送门原题传送门题意给出由小写字母初始字符串,每次操作将字符串中所有为\(c\)的字符改为\(d\)。输出最终的字符串。分析很明显只需要开一个\(fa\)数组,其中\(fa[i]=j\)表示字母\(i\)被改为了\(j\)。对于每次操作只需要遍历\(26\)个字母,将\(fa[i]=c\)的那些......
  • [ABC341E] Alternating String 题解
    题目传送门原题传送门题意给出长为\(n\)的01串,如果一个子串01交替出现,则称其为“好的”。有\(q\)次询问,把\([x,y]\)中的每一位反转或者询问\([x,y]\)是否是“好的”。分析一眼线段树。用线段树维护区间是否是“好的”,每个节点维护最左段和最右端的值,pushup和q......
  • [ABC342G] Retroactive Range Chmax 题解
    洛谷传送门原题传送门题意维护一个数列,有以下三个操作:区间最值操作,即将\([l,r]\)区间内的\(A_i\)变成\(\max(A_i,v)\)。删除操作操作,即将第\(i\)次操作删除,保证第\(i\)次操作是操作\(1\),且未被删除。注:仅删除第\(i\)次操作,后续操作仍然在。查询,询问当前的......
  • P1013 进制位 题解
    题注题目传送门这篇题解其实是上一篇题解(Llf0703同志)证明过程的完善(其实就是思路一样了啦),来让入门者或追求严谨者对证明过程更加了解。题目分析\(3\leqn\leq9\),也即数字的个数\(N\leq8\)。研究样例发现,\(N\)与进制\(R\),以及数字对应两位数个数\(M\)与数字本身......
  • Pursuit For Artifacts 题解(图论)
    PursuitForArtifacts题解题目给定一张\(n\)个点\(m\)条边的简单无向连通图,边有边权,边权要么为\(0\),要么为\(1\)。每条边只能通过一次(两个方向加起来只能通过一次)。求是否存在一条从\(a\)到\(b\)的路径,满足路径上至少存在一条权为\(1\)的边。\(1\leqn,m\l......
  • CF1864C 题解
    \(x=2^k\)是好做的,每次以\(2^{k-1}\)为因数即可。对于其他情况,考虑每次让\(x\)减去其二进制下最低位的\(1\)直至变成\(2^k\)。这种策略下显然每个数只会在以上两个大步骤下取到,故每个数使用不超过\(2\)次。同时操作次数在\(O(\logn)\)这个量级。#include<bits/......
  • P7086 题解
    考虑把每个字符串的前\(k\)位和后\(k\)位看成点,字符串看成边,那么一个字符串前缀后缀至少有一个是相似群体的前缀后缀,看成这条边的两个端点至少有一个被选中。那么这就变成了一个最小点覆盖问题。考虑匈牙利算法算出答案,然后考虑如何构造答案。考虑右边没有被匹配的点,选中这......
  • AT_abc317_f 题解
    调了一小时结果发现爆longlong了。考虑数位dp,具体来说,设计状态\(dp_{i,r_1,r_2,r_3,mx_1,mx_2,mx3_,c_1,c_2,c_3}\)表示当前考虑到第\(i\)位,\(x_1,x_2,x_3\)模\(a_1,a_2,a_3\)等于\(r_1,r_2,r_3\)三个数是否达到\(n\)的上界以及是否全部是\(0\)。然后从高到低枚......