NOIP 2017 提高組 時間複雜度___模擬
阿新 • • 發佈:2019-01-31
題目大意;
題解:
這題顯示開一個棧模擬即可,
只需要考慮5種情況:
1.x為正整數,y為正整數2種情況
①x>y,它其中的迴圈計為無效
②x≤y,算為常數複雜度,繼承上一層的複雜度
③x為正整數,y為n時,計為一層迴圈
④x為n,y為正整數,即和①一樣,其中迴圈無效
⑤x為n,y為n,依然是常數複雜度,繼承上一層
然後注意細節吧,這題主要是要注意很多亂七八糟的東東
程式碼:
var
rp:array [0..100001] of char;
cp:array [0..100001] of longint;
a:array ['a'..'z'] of boolean;
tp,op,ans,w,x1,x2,t,i,j,n,m,k1,k2:longint;
check:boolean;
x3,x4,s:string;
begin
readln(t);
while t>=1 do
begin
readln(s);
w:=pos(' ',s); val(copy(s,1,w-1),x1); delete(s,1,w);
if pos('^',s)<>0 then w:=pos('^',s)
else w:=0;
if w<>0 then val(copy(s,w+1,length(s)-w-1),x2)
else x2:=0;
ans:=0;
fillchar(a,sizeof(a),false);
op:=0;
tp:=0;
check:=false ;
for i:=1 to x1 do
begin
readln(s);
if check then continue;
if s[1]='F' then
begin
if not(a[s[3]])
then begin
a[s[3]]:=true;
inc(op);
rp[op]:=s[3];
end
else check:=true;
if check then continue;
delete(s,1,4);
k1:=pos(' ',s);
x3:=copy(s,1,k1-1);
delete(s,1,k1);
x4:=s;
if (x3='n') and (x4<>'n') then begin tp:=tp+1; cp[op]:=-1; end
else if (x3='n') and (x4='n') then cp[op]:=cp[op-1]
else if (x3<>'n') and (x4='n') then cp[op]:=cp[op-1]+1
else begin
val(x3,k1);
val(x4,k2);
if k1>k2 then begin tp:=tp+1; cp[op]:=-1 end
else cp[op]:=cp[op-1];
end;
if tp=0 then
if cp[op]>ans then ans:=cp[op];
end
else if s[1]='E' then
begin
if op=0 then check:=true
else begin
a[rp[op]]:=false;
if (cp[op]=-1) and (tp>0) then dec(tp);
dec(op);
end;
end;
end;
if op<>0 then check:=true;
if check then writeln('ERR')
else if (ans=x2) then writeln('Yes')
else writeln('No');
dec(t);
end;
end.