AC on #10 其他全WA求助
  • 板块P1871 对撞机
  • 楼主pokefunc
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/31 10:22
  • 上次更新2023/10/27 17:38:37
查看原帖
AC on #10 其他全WA求助
188716
pokefunc楼主2022/7/31 10:22
#include<cstdio>
#include<vector>
#include<map>
using std::vector;
using std::map;
const int M=1e5+5;
map<int,int> s;
int n,m;
int primes[M],cnt;
bool vis[M];
bool open[M];
void getprime(){
    vis[1]=1;
    for(int i=2;i<=n;++i)if(!vis[i]){
        primes[++cnt]=i;
        for(int j=2;i*j<=n;++j)vis[i*j]=1;
    }
}
int main(){
    scanf("%d%d",&n,&m);getchar();
    getprime();
    while(m--){
    	char ss[3]; 
    	int i;
        scanf(" %s%d",ss,&i);
        if(ss[0]=='+'){
            if(open[i])puts("Already on");
            else{
                vector<int> v;
                v.clear();
                int q=i;
                for(int k=1;k<=cnt&&q>1;++k){
                    int p=primes[k];
                    //printf("%d %d\n",q,p);
                    if(q%p==0){
                       if(s.find(p)!=s.end()){
                           printf("Conflict with %d\n",s[p]);
                           goto label;
                       }
                        v.push_back(p);
                        do{
                            q=q/p;
                        }while(q%p==0);
                    }
                }
                open[i]=1;
                for(auto w:v)s[w]=i;
                puts("Success");
                label:printf("");
            }
        }
        else{
            if(!open[i])puts("Already off");
            else{
                int q=i;
                for(int k=1;k<=cnt&&i>1;++k){
                    int p=primes[k];
                    if(q%p){
                        s.erase(p);
                        do{
                            q%=p;
                        }while(q%p==0);
                    }
                }
                open[i]=0;
                puts("Success");
            }
        }
    }
    return 0;
}
2022/7/31 10:22
加载中...