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. 为啥使用innodb_flush_method=o_direct 就能减轻io压力呢

    为啥使用innodb_flush_method=o_direct 就能减轻io压力呢

  2. ctfhub技能树—RCE—过滤目录分隔符,过滤运算符

    过滤目录分隔符 打开靶机 查看页面信息 查询当前目录下文件结构 进入flag_is_here目录 127.0.0.1;cd flag_is_here 127.0.0.1||ls 执行之后发现还是在当前 ...

  3. mysql—make_set函数

    使用格式:MAKE_SET(bits,str1,str2,-) 1 返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串.str1对应于位0,str2到第1位 ...

  4. 通过logmnr找到被修改前的存储过程

    1.找到存储过程被修改时的归档日志 SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME BETWEEN TO_DATE('20191118080000', ...

  5. Windows系统使用运行框运行程序

    配置步骤 1. 在非系统盘创建一个新文件夹,自定义名称.将需要使用运行框启动的程序或文件放入文件夹,并将其更改为自己容易记忆的名称 2. 创建环境变量 右击 "此电脑" → &qu ...

  6. 如何安装快速 Docker 和 Docker-Compose 服务

    最近由于个人在大家基于 Docker  的.企业级的CI/CD 环境,所以要安装 Docker 和 Docker-Compose ,这也算是一个学习过程,就把整个过程记录下来,便于以后查询. 测试环境 ...

  7. win api 窗口操作-窗口置顶与寻找与激活

    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos https://docs.micr ...

  8. vue初始化页面闪动问题

    使用vue开发时,在vue初始化之前,由于div是不归vue管的,所以我们写的代码在还没有解析的情况下会容易出现花屏现象,看到类似于{{message}}的字样,虽然一般情况下这个时间很短暂,但是我们 ...

  9. poj 2112 最优挤奶方案

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 16550   Accepted: 5945 ...

  10. Java泛型中的通配符T,E,K,V

    Java泛型中的通配符T,E,K,V 1.泛型的好处 2.泛型中的通配符 2.1 T,E,K,V,? 2.2 ?无界通配符 2.3 上界通配符 < ? extends E> 2.4 下界通 ...