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");
}
}
}

浙公网安备 33010602011771号