社区讨论

哎 ,救救孩子吧—为什么90分,球球了dalao们,ac闭关PWP,改了1小时了

P1871对撞机参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mdb6ph1y
此快照首次捕获于
2025/07/20 12:36
8 个月前
此快照最后确认于
2025/11/04 04:04
4 个月前
查看原帖
CPP
#include<bits/stdc++.h> 
using namespace std;
int n,m,nums,pert[100001],cnt,minPr[100001];
bool is_Open[100001],is_Close[100001];
string s2[2]={"Success\n","Already off\n"},s1[3]={"Conflict with ","Success\n","Already on\n"};
char c;  
void sieve(){
	minPr[1] = 1;
	for(int i=2;i<=100000;i++){
		if(minPr[i]==0){
			minPr[i]=i; 
			if(i<=100000/i) {
				for(int j=i*i;j<=100000;j+=i)
					if(minPr[j]==0)minPr[j]=i;
			}
		}
	}
} 
int cht(int x){
	if(x==1)return -1; 
	int temp=x;
	while(temp>1){
		int p=minPr[temp]; 
		if(p == 0) p = temp;  
		for(int i=cnt;i>=1;i--)
			if(pert[i]%p==0&&is_Open[pert[i]])
				return pert[i]; 
		while(temp%p==0)temp/=p;
	}
	return -1;
} 
int is_Ok(int id){
	if(is_Open[id]) return 3; 
	int cnn=cht(id);
	if(cnn!=-1)return cnn;
	is_Open[id]=1;
	pert[++cnt]=id; 
	return 1;
}  
bool is_Dl(int id){
	if(!is_Open[id]) return 1;
	is_Open[id]=0; 
	for(int i=1;i<=cnt;i++){
		if(pert[i]==id){
			swap(pert[i],pert[cnt]);
			cnt--;
			break;
		}
	} 
	return 0;
}  
int main() {
	sieve();
	cin>>n>>m; 
	for(int i=0;i<m;i++){  
		cin>>c>>nums;
		if(c=='+'){
			int r=is_Ok(nums);
			if(r==3)cout<<s1[2]; 
			else if(r==1)cout<<s1[1];  
			else cout<<s1[0]<<r<<'\n';  
		}
		else cout<<s2[is_Dl(nums)];  
	} 
	return 0; 
} 

回复

2 条回复,欢迎继续交流。

正在加载回复...