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 / 思维 暴力

B. T-primes1300 / 思维 数论

C. Social Distance1300 / 思维 分类讨论

C. Pluses and Minuses 1300 / 思维 前缀和

C. A and B and Team Training1300 / 思维 贪心 枚举

C. Destroying Array 并查集,逆向思维