社区讨论

为什么会AC

P11186三目运算参与者 5已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m2bt84vd
此快照首次捕获于
2024/10/16 19:49
去年
此快照最后确认于
2025/11/04 17:03
4 个月前
查看原帖
为什么在本机上测第四个样例运行后会未响应,但是交上去后AC
CPP
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
struct node
{
	int op,num,l,r;
};
node tr[1000010];
string s;
stack<int> sta;
int res[100010],t,cnt=0,sum=0;
void build()
{
	int i,len=s.size()-1,num=0,w=1,l,r;
	for(i=len;i>=0;i--)
	{
		if(s[i]>='0'&&s[i]<='9')
		{
			num+=((s[i]-'0')*w);
			w*=10;
		}
		if(s[i]==':'||s[i]=='?') cnt++;
		if((s[i]==':'||s[i]=='?')&&s[i+1]!='x')
		{
			t++;
			tr[t].num=num;
			num=0;w=1;
			sta.push(t);
		}
		if(s[i]=='>'||s[i]=='<')
		{
			t++;
			tr[t].num=num;
			if(s[i]=='>') tr[t].op=1;
			else tr[t].op=2;
			num=0;w=1;
			l=sta.top();sta.pop();
			r=sta.top();sta.pop();
			tr[t].l=l;tr[t].r=r;
			sta.push(t);
		}
	}
}
void dfs(int n,int l,int r)
{
	if(l>r) return ;	
	int i;
	if(tr[n].op==0)
	{
		for(i=l;i<=r;i++)
		{
			res[i]=tr[n].num;
		}
		return ;
	}
	if(tr[n].op==1)
	{
		dfs(tr[n].l,tr[n].num+1,r);
		dfs(tr[n].r,l,tr[n].num);
	}
	if(tr[n].op==2)
	{
		dfs(tr[n].l,l,tr[n].num-1);
		dfs(tr[n].r,tr[n].num,r);
	}
}
int main()
{
	int i,m,q,x,sum=0,lens;
	scanf("%d%d",&m,&q);
	cin>>s;
	lens=s.size();
	build();
	dfs(t,0,m+1);
	if(cnt==0)
	{
		for(i=0;i<lens;i++)
		{
			sum=sum*10+s[i]-'0';
		}
		for(i=1;i<=q;i++)
		{
			scanf("%d",&x);
			printf("%d\n",sum);
		} 
	}
	else
	{
		for(i=1;i<=q;i++)
		{
			scanf("%d",&x);
			printf("%d\n",res[min(x,m+1)]);
		}
	}
	return 0;
}

回复

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

正在加载回复...