为什么会AC
查看原帖
为什么会AC
987505
suym123楼主2024/10/16 19:48

为什么在本机上测第四个样例运行后会未响应,但是交上去后AC

#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;
}
2024/10/16 19:48
加载中...