这道题在考试时看到感觉与第一题放反了位置(因为我还没有看到第一题是结论题)

对于每个语句进行栈的模拟,而如果有语法错误就特判。

对于每一条for语句我们将其与栈顶元素连边,复杂度是1的我们不用考虑,如果复杂度是n我们就算他的贡献加一。

这样我们求最大复杂度就相当于求一颗子树的最大深度,当然如果这条语句不合法我们就将其整颗子树贡献算为0。

                         #include<bits/stdc++.h>
using namespace std;
int top;
struct node
{
int to,nex;
}e[];
int cnt,head[];
void add(int x,int y)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;
}
int inf=1e9;
struct poin
{
int l,r,id;
}a[];
stack<poin>qq;
int dfs(int x)
{
int pre=;
int ma=;
if(a[x].l!=inf&&a[x].r==inf)pre=;
if(a[x].l>a[x].r)return ;
for(int i=head[x];i;i=e[i].nex)
{
ma=max(ma,dfs(e[i].to));
}
return ma+pre;
}
char s[];
bool b[];
int q[];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
cnt=;
memset(head,,sizeof(head));
memset(b,,sizeof(b));
memset(q,,sizeof(q));
scanf("%d",&n);top=;while(!qq.empty())qq.pop();
scanf("%s",s);int x=;bool flag=;
if(s[]>=''&&s[]<='')
for(int i=;s[i]>=''&&s[i]<='';++i)
x=x*+s[i]-'';
else{
for(int i=;s[i]>=''&&s[i]<='';++i)
x=x*+s[i]-'';
}
if(s[]!='n')x=;
for(int i=;i<=n;++i)
{
scanf("%s",&s);
if(s[]=='F')
{
scanf("%s",&s);int d=s[]-'a'+;
if(b[d]){
flag=;
}int u=,v=;int w=,z=;
b[d]=;q[++top]=d;
scanf("%s",&s);
if(s[]=='n')w=inf;
else{while(s[u]>=''&&s[u]<='')w=w*+s[u]-'',++u;}
scanf("%s",&s);
if(s[]=='n')z=inf;
else{while(s[v]>=''&&s[v]<='')z=z*+s[v]-'',++v;}
a[i].l=w;a[i].r=z;a[i].id=i; if(qq.empty())
add(,i);
else add(qq.top().id,i);
qq.push(a[i]); }
else
{
if(qq.empty())flag=;
else{b[q[top]]=;--top;qq.pop();}
}
}
if(!qq.empty())flag=;
if(flag){
puts("ERR");continue;
}
int ans=dfs();
if(ans!=x)puts("No");
else puts("Yes");
}
return ;
}

考试时我没有求max而是算的sum

还好noip数据水让我混了90分,谢天谢地。

最新文章

  1. Gym - 101102C
  2. 什么是UART中的FIFO
  3. Vs2015智能提示英文?
  4. 第一课1、ROS
  5. 哈夫曼树(一)之 C语言详解
  6. Canu Tutorial(canu指导手册)
  7. XMLHttpRequest的五步使用方法
  8. js中的this怎么理解
  9. Spring Quartz结合Spring mail定期发送邮件
  10. DHCP服务器
  11. linux-Python升级安装
  12. document.domain与js跨域的问题
  13. [0] WCF开发下,提示HTTP 无法注册 URL 进程不具有此命名空间的访问权限
  14. Javascript/Jquery操作数组,增删改查以及动态创建HTML元素
  15. Kettle参数化配置
  16. jQuery简单笔记
  17. Math对象中比较常用的计算数学相关的三个方法
  18. 【Git之旅】2.Git对象
  19. ABP之什么是ABP(ASP.NET Boilerplate)
  20. Windows 10 上编译 Hadoop

热门文章

  1. 【AtCoder】ARC092 D - Two Sequences
  2. 面试整理(3)js事件委托
  3. 使用SPLUNK进行简单Threat Hunting
  4. C++中string.find()函数,string.find_first_of函数与string::npos
  5. 64_p4
  6. 【转载】selenium之 定位以及切换frame(iframe)
  7. 码源中国.gitignore忽略文件配置
  8. 72.Edit Distance---dp
  9. OAuth认证与授权
  10. C++——map注意事项