P3952-时间复杂度【模拟】
生活随笔
收集整理的這篇文章主要介紹了
P3952-时间复杂度【模拟】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.org/problemnew/show/P3952
題目大意
比較復(fù)雜就直接給截圖了
解題思路
開一個棧來維護序列,因為它保證合法的程序中一個變量不會相互嵌套所以就拿變量的字母當做每個循環(huán)的下標即可。然后對于輸入的x,yx,yx,y有五種情況
然后特判一下ERRERRERR就好了
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #include<stack> using namespace std; stack<int> q; int T,n,w,none,b[30],times,ans,use[30]; bool fuck; char c; int read() {int num=0;while((c=getchar())!=' '&&c!='\n'){if(c=='n') {c=getchar();return -1;}else num=num*10+c-'0';}return num; } int main() {scanf("%d",&T);while(T--){while(!q.empty()) q.pop();memset(b,0,sizeof(b));memset(use,0,sizeof(use));fuck=none=times=ans=0;scanf("%d ",&n);char c;scanf("O(%c",&c);if(c!='n') w=0;else scanf("%c%d",&c,&w);scanf(")");for(int i=1;i<=n;i++){scanf("\n%c",&c);if(c=='E'){if(fuck) continue;if(q.empty()) {fuck=1;continue;}if(q.top()==none) none=0;if(!none){if(b[q.top()]) times--;b[q.top()]=0;use[q.top()]=0;}q.pop();}if(c=='F'){scanf(" %c ",&c);c-='a'-1;int x=read(),y=read();if(fuck) continue;if(use[c]) {fuck=1;continue;}q.push(c);if(none) continue;use[c]=1;if(x==-1&&y!=-1) none=c;if(x!=-1&&y!=-1&&y<x) none=c;if(x!=-1&&y==-1) times++,b[c]=1;ans=max(ans,times);}}if(!q.empty()||fuck) printf("ERR\n");else if(w!=ans) printf("No\n");else printf("Yes\n");} }總結(jié)
以上是生活随笔為你收集整理的P3952-时间复杂度【模拟】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在手机上怎么修改无线路由器的名称怎么在手
- 下一篇: jzoj3347,bzoj3257-[N