CF1401C

题目简化和分析:

交换数组使其变为升序,满足交互的两数 \(a_i\)\(a_j\),$ \min{a_i(1\le i\le n)}|\gcd(a_i,a_j)$ 。

简单思维题,Div.2 C 有点不太合适。

因为数组的最小值始终不变,所以直接比较即可。

Solution:

#include<bits/stdc++.h>

using namespace std;

const int N=1e5+50;

int t,n;

int a[N],b[N];

int main()
{
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		int minn=INT_MAX;
		for(int i=1;i<=n;++i) scanf("%d",&a[i]),b[i]=a[i],minn=min(minn,a[i]);
		sort(b+1,b+n+1);
		bool flag=1;
		for(int i=1;i<=n;++i){
			if(a[i]==b[i]) continue;
			if(__gcd(a[i],b[i])%minn!=0){
				printf("NO\n");
				flag=0;
				break;
			}
		}
		if(flag){
			printf("YES\n");
		}
	}
}
posted @ 2022-08-10 21:41  RVG  阅读(28)  评论(0)    收藏  举报