社区讨论
为什么会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 条回复,欢迎继续交流。
正在加载回复...