C. Mere Array1300 / 思维 数论
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Mere Array1300 / 思维 数论相关的知识,希望对你有一定的参考价值。
https://codeforces.com/problemset/problem/1401/C
将其从小到大排序,挨个比较,将不是在正确位置上的数,存到ans里。
然后看ans里的每一个数和最小值gcd,看是不是最小值,如果是,那么这些数有一定可以通过某些变换到正确的位置上。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int a[N],b[N];
int gcd(int a,int b) {return b?gcd(b,a%b):a;}
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>a[i],b[i]=a[i];
sort(b,b+n);
vector<int>ans;
for(int i=0;i<n;i++) if(a[i]!=b[i]) ans.push_back(a[i]);
bool flag=true;
for(int i=0;i<ans.size();i++) if(gcd(b[0],ans[i])!=b[0]) flag=false;
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
以上是关于C. Mere Array1300 / 思维 数论的主要内容,如果未能解决你的问题,请参考以下文章
C. Boats Competition1300 / 思维 暴力
C. Social Distance1300 / 思维 分类讨论
C. Pluses and Minuses 1300 / 思维 前缀和