CF1401-C. Mere Array
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的更多相关文章
- TypeScript体系调研报告
作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...
- Codeforces Round #665 (Div. 2)A-C题解
A. Distance and Axis 题目:http://codeforces.com/contest/1401/problem/A 题解:对于n来说分两种情况,一是奇数,二则是偶数 ①奇数:对于 ...
- codeforce Round #665(div 2)A B C
A. Distance and Axis 题意:在一个0x轴上,给了a在0x轴上的坐标,要你放一个b点使得abs(0B - AB)的值等于 k,但是有的时候如果不移动A点就不能实现这个条件,所以要你求 ...
- Codeforces Round 665 赛后解题报告(暂A-D)
Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...
- Codeforces Round 665 (div2)
2020.8.22 装修完了我的博客,喜欢这个造型,挂上友链就更好了 昨天cf就是一个彻头彻尾的悲剧,本来能上蓝,结果因为在A题耽误时间过多导致掉了30分,不过没关系,这算是一个小波动吧,影响不了什么 ...
- Codeforces Round #665 (Div. 2)
Codeforces Round #665 (Div. 2) A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...
- 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的 ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
随机推荐
- innodb是怎么刷新日志缓冲的
当innodb把日志缓冲刷新到磁盘日志文件的时候,先会用一个mutex锁住缓冲区,刷新到所需要的位置,然后移动剩下的条目到缓冲区的前面,当mutex释放时,可能有超过一个事务已经准备好刷新其日志记录, ...
- oracle优化求生指南脚本记录
1.查找未使用索引 /* Formatted on 2020/5/12 下午 03:32:39 (QP5 v5.163.1008.3004) */ WITH IN_PLAN_OBJECTS AS (S ...
- LuoguP5748 集合划分计数
题意 一个有\(n\)个元素的集合,将其分为任意个非空子集,求方案数.集合之间是无序的,\(\{\{1,2\},\{3\}\}=\{\{3\},\{1,2\}\}\). 设\(f_n\)表示用\(n\ ...
- ModelForm的基本用法:
一.ModelForm的基本用法示例: from django import forms from app01 import models class BookModelForm(forms.Mode ...
- feign使用okHttpClient,调用原理
最近项目中 spring cloud 用到http请求,使用feign,配置okhttp,打算配置一下就直接使用,不过在压测与调优过程中遇到一些没有预测到的问题,附上排查与解析结 yml.pom配置 ...
- 「THP3考前信心赛」题解
目录 写在前面 A 未来宇宙 B 空海澄澈 C 旧约酒馆 算法一 算法二 D 博物之志 算法一 算法二 算法三 写在前面 比赛地址:THP3 考前信心赛. 感谢原出题人的贡献:第一题 CF1422C, ...
- LOJ10066
LOJ10066 新的开始 题目描述 发展采矿业当然首先得有矿井,小 F 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井,但他似乎忘记考虑的矿井供电问题-- 为了保证电力的供应,小 F 想 ...
- Springboot 项目部署到服务器上
项目部署到服务器上,有两种方式,一种 jar 包,一种 war 包 jar包 部署时,后续的域名配置,SSL证书等在nginx中配置 war包 部署时,后续的域名配置可以在tomcat中配置就好,修改 ...
- PL/SQL 遇到问题
报错:Initialization error Oracle client not properly installed 1.下载instanceclient并解压2.打开PL/SQL,在连接数据库的 ...
- 基于Koa2框架的项目搭建及实战开发
Koa是基于 Node.js 平台的下一代 web 开发框架,由express原班人马打造,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 ...