求助卡常
查看原帖
求助卡常
767660
zhaohanwen楼主2023/7/4 20:36

记录

90pts了,求助卡常

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m;
bool status[N]={false};
int gcd(int a, int b) {
    int az = __builtin_ctz(a);
    int bz = __builtin_ctz(b);
    int z = min(az, bz);
    b >>= bz;
    while (a) {
        a >>= az;
        int diff = a - b;
        az = __builtin_ctz(diff);
        b = min(a, b), a = abs(diff);
    }
    return b << z;
}
inline int checkgcd(int a)
{
	for(int i=1;i<=n;i++)
	{
		if(status[i]==true)
		{
			if(gcd(a,i)!=1)
			{
				return i;
			}
		}
	}
	return -1;
}
int main()
{
	//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	//cin>>n>>m;
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++)
	{
		char q[10];
		int k;
		//cin>>q>>k;
		scanf("%s %d",&q[0],&k);
		if(q[0]=='+')
		{
			if(status[k]==true)
			{
				//cout<<"Already on"<<endl;
				printf("Already on\n");
				continue;
			}
			else
			{
				int result=checkgcd(k);
				if(result!=-1)
				{
					//cout<<"Conflict with "<<checkgcd(k)<<endl;
					printf("Conflict with %d\n",result);
					continue;
				}
				else
				{
					status[k]=true;
					//cout<<"Success"<<endl;
					printf("Success\n");
					continue;
				}
			}
		}
		else if(q[0]=='-')
		{
			if(status[k]==false)
			{
				//cout<<"Already off"<<endl;
				printf("Already off\n");
				continue;
			}
			else
			{
				status[k]=false;
				//cout<<"Success"<<endl;
				printf("Success\n");
				continue;
			}
		}
	}
	return 0;
}
2023/7/4 20:36
加载中...