NOIP 2017 Day1 T2 時間複雜度
阿新 • • 發佈:2018-12-19
題意:自己看吧
演算法:模擬
難度:NOIP+
程式碼如下:
應該對您沒有什麼幫助
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <cmath> #include <map> #include <algorithm> #define ll long long using namespace std; map<int,int>Mbianliang; int main() { int T; scanf("%d",&T); while(T--) { Mbianliang.clear(); char OOO[15]; int L; scanf("%d",&L); getchar(); getchar(); getchar(); int tim=0; char q; q=getchar(); if(q=='n') { getchar(); scanf("%s",OOO+1); int uio=strlen(OOO+1)-1; if(uio==2) { tim+=(OOO[1]-48)*10; tim+=OOO[2]-48; }else { tim=OOO[1]-48; } tim+=123; }else { tim=1; } gets(OOO); /*if(OOO[3]=='1') tim=1; else if(OOO[3]=='n') tim=OOO[5]-48,tim+=123;*/ char rrr[15]; int fla=0; char bbll[105]; int ttn=0; int lj=0,ljj=0; int maxn=0; for(int i = 1;i <= L;i++) { int ii=i; scanf("%s",rrr+1); if(rrr[1]=='F') { getchar(); char qw; scanf("%c",&qw); bbll[++ttn]=qw; if(Mbianliang[qw]) fla=1; else Mbianliang[qw]=1; char x[5],y[5]; /*getchar(); scanf("%c",&x); getchar(); scanf("%c",&y);*/ scanf("%s%s",x+1,y+1); int len=strlen(x+1); int ln=strlen(y+1); int aa=0,bb=0; if(len==1&&ln==1) { int nnn=0; int nnnn=0; if(x[1]-48>53) nnn=123; else nnn=x[1]-48; if(y[1]-48>53) nnnn=123; else nnnn=y[1]-48; //if(nnn==nnnn) lj=0; //if(nnn<20&&nnn<20) lj=0; if(nnn>nnnn) { ljj++; int tuy=1; char str[10]; gets(str); for(int j = i+1;j <= L;j++) { if(!tuy) { i=j-1; break; } maxn=max(maxn,lj); scanf("%s",str+1); if(str[1]=='E') ljj--,Mbianliang[bbll[ttn]]=0,ttn--,tuy--; if(str[1]=='F') tuy++,ljj++; if(str[1]=='F') { getchar(); scanf("%s",str+1); bbll[++ttn]=str[1]; if(Mbianliang[str[1]]) fla=1; else Mbianliang[str[1]]=1; } gets(str); if(!tuy) { i=j; break; } } //break; } if(i!=ii) goto loop; //if(nnn==123&&nnnn==123) lj=0; if(nnn==123||nnnn==123) { if(nnn==123&&nnnn==123) {} else lj++; } }else if(len==1) { //if(x[1]-48>53) goto lop; //else { ljj++; if(ln==3) { bb+=(y[1]-48)*100; bb+=(y[2]-48)*10; bb+=(y[3]-48)*1; }else if(ln==2) { bb+=(y[1]-48)*10; bb+=(y[2]-48)*1; } aa=x[1]-48; } }else if(ln==1) { if(y[1]-48>53) lj++; else { ljj++; if(len==3) { aa+=(x[1]-48)*100; aa+=(x[2]-48)*10; aa+=(x[3]-48)*1; }else if(len==2) { aa+=(x[1]-48)*10; aa+=(x[2]-48)*1; } bb=y[1]-48; } }else { ljj++; if(len==3) { aa+=(x[1]-48)*100; aa+=(x[2]-48)*10; aa+=(x[3]-48)*1; }else if(len==2) { aa+=(x[1]-48)*10; aa+=(x[2]-48)*1; } if(ln==3) { bb+=(y[1]-48)*100; bb+=(y[2]-48)*10; bb+=(y[3]-48)*1; }else if(ln==2) { bb+=(y[1]-48)*10; bb+=(y[2]-48)*1; } } if(aa>bb) { //ljj++; char str[10]; gets(str); int tuy=1; for(int j = i+1;j <= L;j++) { if(!tuy) { i=j-1; break; } maxn=max(maxn,lj); scanf("%s",str+1); if(str[1]=='E') ljj--,Mbianliang[bbll[ttn]]=0,ttn--,tuy--; if(str[1]=='F') tuy++,ljj++; if(str[1]=='F') { getchar(); scanf("%s",str+1); bbll[++ttn]=str[1]; if(Mbianliang[str[1]]) fla=1; else Mbianliang[str[1]]=1; } gets(str); if(!tuy) { i=j; break; } } //break; } //if(i!=ii) continue; } loop: maxn=max(maxn,lj); if(rrr[1]=='E') { Mbianliang[bbll[ttn]]=0; ljj--; ttn--; } if(ljj<0) lj+=ljj,ljj=0; if(i==L&&ttn) fla=1; } if(ttn!=0) fla=1; if(fla) puts("ERR"); else if(tim>101) { if(tim-123==maxn) puts("Yes"); else puts("No"); }else if(tim==1) { puts("Yes"); } } return 0 ; }