专栏文章

P10443 「MYOI-R3」消消乐

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minqg2lv
此快照首次捕获于
2025/12/02 06:40
3 个月前
此快照最后确认于
2025/12/02 06:40
3 个月前
查看原文

P10443 「MYOI-R3」消消乐

题目要求:

gcd(ax,ay)=az\gcd(a_x,a_y)=a_z 则删除 aza_zxyzx\ne y \ne z
说白了就是将删掉数组中存在的任意两数的gcd

注意到:

通过gcd的性质我们可以发现 gcd(x,y)min(x,y)gcd(x,y)\le min(x,y) 所以数组中的最大值和次大值 max(ai)  and  nextmax(ai)max(a_i)\text{ }\text{ } and \text{ }\text{ }next-max(a_i)
所以,如果其余的 n2n-2 个数都是 gcd(max(ai) , nextmax(ai))gcd(max(a_i)\text{ } , \text{ }next-max(a_i)) 则输出 YesYes,否则又如何一个不是就输出 NoNo.
CPP
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn(1e6+10);
int n,T;
int a[maxn];
int gcd(int a,int b){
    if(b==0){
        return a;
    }
    return gcd(b,a%b);
}
int main(){
    cin>>T;
    while(T--){
        cin>>n;
        bool flag(false);
        for(int i(1);i<=n;i++){
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        if(n==2){
            cout<<"Yes\n";
            continue;
        }
        int gd(gcd(a[n],a[n-1]));
        for(int i(1);i<n-1;i++){
            if(a[i]!=gd){
                cout<<"No\n";
                flag=true;
                break;
            }
        }
        if(!flag){
            cout<<"Yes\n";
        }
    }
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...