求助卡常
查看原帖
求助卡常
875806
liupan2010楼主2023/6/11 10:40

卡到 80pts\text{80pts} 了,真的不知道怎么卡,不想打正解。

#include<iostream>
#include<algorithm>
#include<bitset>
#define getchar getchar_unlocked
#define putchar putchar_unlocked
using namespace std;
template<typename T>
inline T read(){
    T get=0,w=1;
    char c=getchar();
    while(c<'0'||c>'9') (c=='-')?w=-1:1,c=getchar();
    while(c>='0'&&c<='9') get=get*10+c-'0',c=getchar();
    return get*w;
}
template<typename T>
inline void write(T a){
    (a<0)?putchar('-'),a=-a:1;
    if(a>=10) write(a/10);
    putchar(a%10+'0');
}
int A,B,C,D;
inline int gcd(int a,int b){
    A=__builtin_ctz(a),B=__builtin_ctz(b),C=A>B?B:A;
    b>>=B;
    while(a){
    	a>>=A,D=b-a,A=__builtin_ctz(D);
    	a<b?b=a:0;
    	a=D<0?-D:D;
	}
	return b<<C;
}
int id[100001];
bitset<100001>is_open;
int main(){
	int n=read<int>(),m=read<int>();
	for(register int i=1;i<=n;i++) id[i]=i;
	while(m--){
		char c;
        while((c=getchar())!='-'&&(c!='+'));
		int i=read<int>();
		if(c=='+'){
			if(is_open[i]){
				fputs("Already on\n",stdout);
			}
			else{
				int flag=1;
				for(register int j=1;j<=n;++j){
					if(is_open[j]&&__gcd(i,j)!=1&&i!=j){
						fputs("Conflict with ",stdout);
						write(j);
						fputs("\n",stdout);
						flag=0;
						break;
					}
				}
				(flag)?fputs("Success\n",stdout),is_open[i]=1:1;
			}
		}
		else{
		    if(!is_open[i]){
		        fputs("Already off\n",stdout);
		    }
			else{
			    is_open[i]=0,fputs("Success\n",stdout);
			}
		}
	}
	return 0;
}

验证码 cz 祭

2023/6/11 10:40
加载中...