社区讨论

本地跑不出来但是交洛谷能AC

P9869[NOIP2023] 三值逻辑参与者 3已保存回复 7

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@m2db8309
此快照首次捕获于
2024/10/17 21:01
去年
此快照最后确认于
2025/11/04 16:58
4 个月前
查看原帖
rt,本地测试大样例时没跑出来结果
测试时把经过的每个点都输出了出来,发现输出到一半却不动了
抱着试试看的心态交了洛谷结果AC了!
能不能帮忙看看是哪里出的问题,是代码的问题还是学校的电脑太老了
代码如下:(码蜂有点怪)
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100000;
const int T=maxn+1;
const int F=-T;
const int U=0;
int f[maxn+10];
int vis[maxn*2+20];//0~n表示n,n+1~2n表示-n 
int c,t,n,m;
char opt; 
int ans;
int work(int x){
	if(x==T||x==F||x==U)
		return x;
	//cout<<x<<endl;  这个地方在测试时输出一半就不输出了 
	if(x<0){
		if(vis[-x+n])
			return f[-x]=T;
		if(vis[-x])
			return f[-x]=U; 
		if(x==-f[-x])	
			return f[-x]=T;
		if(x==f[-x])
			return f[-x]=U; 
		vis[-x+n]=true;
		f[-x]=work(-f[-x]);
		vis[-x+n]=false;
		return f[-x];
	}
	else{
		if(vis[x]){
			f[x]=T;	
			return T;
		}
		if(vis[x+n])
			return f[x]=U;
		if(x==f[x])
			return f[x]=T; 
		if(x==-f[x])
			return f[x]=U;
		vis[x]=true;
		f[x]=work(f[x]);
		vis[x]=false;
		return f[x];
	}
}
signed main(){
	//freopen("1.in","r",stdin);
	scanf("%d%d",&c,&t);
	while(t--){
		ans=0;
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++)
			f[i]=i;
		for(int i=1;i<=m;i++){
			int x,y;
			cin>>opt;
			if(opt=='-'){
				scanf("%d%d",&x,&y);
				f[x]=-f[y];
			}
			else if(opt=='+'){
				scanf("%d%d",&x,&y);
				f[x]=f[y];				
			}
			else if(opt=='T'){
				scanf("%d",&x);	
				f[x]=T;
			}
			else if(opt=='F'){
				scanf("%d",&x);
				f[x]=F;
			}
			else{
				scanf("%d",&x);	
				f[x]=U;
			}
		}
		for(int i=1;i<=n;i++){	
			//memset(vis,0,sizeof(vis));
			if(work(i)==U)
				ans++;			
		}
		printf("%d\n",ans);
	}
	return 0;
} 

回复

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

正在加载回复...