求助月赛C
  • 板块学术版
  • 楼主SJZ2010
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/22 19:41
  • 上次更新2023/11/3 08:12:26
查看原帖
求助月赛C
809729
SJZ2010楼主2023/7/22 19:41

这是我的AC代码

#include <cstdio>
#include <cstring>
#include <set>

int T;
int n, a[500005];

inline int gcd(int x, int y){
    if(y==0)
        return x;
    return gcd(y, x%y);
}
int main(){
    //freopen("C2.in", "r", stdin);
    //freopen("C2.out", "w", stdout);
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        for(int i=1;i<=n;i++)
            scanf("%d", &a[i]);
        if(n==2){
            printf("Yes\n");
            continue;
        }
        bool flag = false;
        std::set< int > ds;
        for(int i=1;i<=n;i++){
            if(a[i] == 2 || a[i] == 3){
                if(ds.find(a[i]) == ds.end())
                    ds.insert(a[i]);
                else{
                    flag = true;
                    break;
                }
            }
            for(int j=2;j*j<=a[i];j++){
                if(a[i]%j == 0){
                    if(ds.find(j) == ds.end())
                        ds.insert(j);
                    else{
                        flag = true;
                        break;
                    }
                    while(a[i]%j == 0)
                        a[i] /= j;
                }
            }
            if(flag)
                break;
            if(a[i]>3){
                if(ds.find(a[i]) == ds.end()){
                    ds.insert(a[i]);
                }else{
                    flag =true;
                }
            }
            if(flag)
                break;
        }
        if(flag)
            printf("No\n");
        else
            printf("Yes\n");
    }
    return 0;
}

然而被我自己 hack\texttt{hack} 了……

1
3
12 3 5

正确输出

No

然而我把这个数据做对了(把倒数17行改一下,具体见这里)

求各位大佬帮忙

2023/7/22 19:41
加载中...