卡到 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 祭