CF1401-C. Mere Array

题意:

给出一个长度为\(n\)的数组\(a\),你可以对这个数组进行如下操作:对于数组\(a\)中任意的两个元素\(a_i\)、\(a_j\),若\(gcd(a_i,a_j)=min\{a_1,a_2,...,a_n\}\),那么就可以交换数组中的这两个数字。

现在问你是否能够通过一定次的上述操作使得数组\(a\)变成非递减序列。


思路:

首先,由于\(min\{a_1,a_2,...,a_n\}\)是定值,那么对于任何数字\(a_i\),只要\(a_i\)是\(a_{min}\)的倍数,都可以构成\(gcd(a_i,a_{min})=a_{min}\),换句话说只要\(a_i\)是\(a_{min}\)的倍数,\(a_i\)和\(a_{min}\)都是可以随意交换的。反之,如果\(a_i\)不是\(a_{min}\)的倍数,那么数字\(a_i\)无论如何都不可能被移动,原因在于:既然\(a_i\)不是\(a_{min}\)的倍数,那么对\(a_i\)进行分解必然不可能得到\(a_{min}\),那么\(a_i\)与任何其他数字\(a_j\)的公因数都不可能分解出\(a_{min}\),那么\(gcd(a_i,a_j)\)也就不可能等于\(a_{min}\)了。

其次,将数组\(a\)进行排序可以得到数组\(b\),那么如果\(b[i]\not=a[i]\)那必然是通过交换数字得到的,而交换数字就可以通过上面说到的方式进行交换。对所有的\(b[i]\not=a[i]\),若\(a[i]\%a_{min}\)都等于\(0\),那么就可以通过题目给出的操作的到非递减序列\(b\),否则不可以。

对于上面一条不理解的可以这样想,我们把序列中\(a[i]\not=b[i]\)的数字\(a[i]\)以及\(a_{min}\)保留下来,然后用\(a_{min}\)作为临时变量对剩下的序列进行选择排序,必然可以使得这个序列变成非递减序列,让后再把删除的数字加进去就可以得到数组\(b\)。删与不删本质上都是一样的,只是为了更好地理解。


AC代码

#include <cstdio>
#include <cstring>
#include <algorithm> const int INF = 0x3f3f3f3f;
const int Maxn = 100005; int a[Maxn], b[Maxn]; void solve() {
int n, minn = INF;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", a + i);
minn = std::min(minn, a[i]);
}
memcpy(b, a, sizeof a);
std::sort(b, b + n);
bool flag = true;
for (int i = 0; i < n; i++) {
if (a[i] != b[i] && a[i] % minn != 0) {
flag = false;
break;
}
}
printf("%s\n", flag ? "YES" : "NO");
} int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}

CF1401-C. Mere Array的更多相关文章

  1. TypeScript体系调研报告

    作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...

  2. Codeforces Round #665 (Div. 2)A-C题解

    A. Distance and Axis 题目:http://codeforces.com/contest/1401/problem/A 题解:对于n来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...

  3. codeforce Round #665(div 2)A B C

    A. Distance and Axis 题意:在一个0x轴上,给了a在0x轴上的坐标,要你放一个b点使得abs(0B - AB)的值等于 k,但是有的时候如果不移动A点就不能实现这个条件,所以要你求 ...

  4. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  5. Codeforces Round 665 (div2)

    2020.8.22 装修完了我的博客,喜欢这个造型,挂上友链就更好了 昨天cf就是一个彻头彻尾的悲剧,本来能上蓝,结果因为在A题耽误时间过多导致掉了30分,不过没关系,这算是一个小波动吧,影响不了什么 ...

  6. Codeforces Round #665 (Div. 2)

     Codeforces Round #665 (Div. 2)  A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...

  7. Codeforces Round #665 (Div. 2) Distance and Axis、

    题目链接:Distance and Axis 题意:在ox轴上,给出点A的横坐标x,你可以向左或右移动点A(x+1/x-1),问你最小移动A的次数,以使得可以在ox轴上找到B点位置,B点满足从O到B的 ...

  8. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  9. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

随机推荐

  1. ctfshow—web—web7

    打开靶机 发现是SQL注入,盲注 过滤了空格符,可以用/**/绕过,抓包 直接上脚本 import requestss=requests.session()url='https://46a0f98e- ...

  2. SAP client锁定

    今天发现一个函数可以锁定SAP CLIENT . SCCR_LOCK_CLIENT 参数是client号码. 还可以通过事物SU10批量锁定用户登陆client

  3. 环境配置-Java-02-卸载

    1.卸载程序 在windows程序与功能中卸载Java相关的两个程序 2.删除环境变量 在windows环境变量中删除JAVA_HOME.CLASSPATH 以及 PATH中的两条路径 3.查看是否卸 ...

  4. vue原生文件上传,可以多文件上传

    1.单文件上传 <template> <div> <label for="fileInput"> <i aria-hidden=" ...

  5. notepad文件对比

    一/格式转换 我用的是json,就以这个为例吧: 打开软件--插件--插件管理 搜索着两个进行安装,自动重启打开 将文件的代码做好,选择语言--J--可以找到json 用刚安装的插件--json vi ...

  6. 监听套接字描述字 已连接套接字描述字 和打电话的情形非常不一样的地方 完成了 TCP 三次握手,操作系统内核就为这个客户生成一个已连接套接字

    1. accept: 电话铃响起了-- 当客户端的连接请求到达时,服务器端应答成功,连接建立,这个时候操作系统内核需要把这个事件通知到应用程序,并让应用程序感知到这个连接.这个过程,就好比电信运营商完 ...

  7. Go GC: Latency Problem Solved

    https://talks.golang.org/2015/go-gc.pdf https://www.oschina.net/translate/go-gc-solving-the-latency- ...

  8. (006)每日SQL学习:关于to_char函数

    to_char函数的官方文档说明: 详细to_char请移步:https://www.cnblogs.com/reborter/archive/2008/11/28/1343195.html 需求:n ...

  9. 逃逸分析与栈、堆分配分析 escape_analysis

    小结: 1.当形参为 interface 类型时,在编译阶段编译器无法确定其具体的类型.因此会产生逃逸,最终分配到堆上. 2.The construction of a value doesn't d ...

  10. 八:SpringBoot-集成JPA持久层框架,简化数据库操作

    SpringBoot-集成JPA持久层框架,简化数据库操作 1.JPA框架简介 1.1 JPA与Hibernate的关系: 2.SpringBoot整合JPA Spring Data JPA概述: S ...