时间复杂度

w可以是两位数 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='n')  return 111;
		if(c=='-')  f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
char readchar()
{
	char c=getchar();
	while(c!='E'&&c!='F')  c=getchar();
	return c;
}
int t,L,judge,hour,top,stk[200],x,y,now,work;
char O[10],f,k;
bool flag['z'+50],er,timeflag[200],workflag[200];
int main()
{
	t=read();
	while(t--)
	{
	    L=read();  scanf("%s",O);
		top=0;  hour=0;  er=0;  now=0;  work=0;
	    memset(flag,0,sizeof(flag));
	    memset(timeflag,0,sizeof(timeflag));
	    memset(workflag,0,sizeof(workflag));
		if(O[2]=='1')  judge=0;
		else
		{
			judge=O[4]-'0';
			if(O[5]>='0'&&O[5]<='9')  judge=judge*10+O[5]-'0';
		}
		for(int i=1;i<=L;i++)
		{
			f=readchar();
		    if(f=='F')
		    {
			    cin>>k;  x=read();  y=read();
			    if(flag[k])  er=1;
			    flag[k]=1;
			    stk[++top]=k;
			    if(x<100&&y>100)
				{
					now++;
					if(work>=0)  hour=max(hour,now);
					timeflag[top]=1;
				}
				if(x>y)
				{
					work--;
					workflag[top]=1;
				}
		    }
		    else
		    {
		    	flag[stk[top]]=0;
		    	if(timeflag[top])
		    	{
		    		timeflag[top]=0;
		    		now--;
				}
				if(workflag[top])
				{
					workflag[top]=0;
					work++;
				}
		    	top--;
		    	if(top<0)  er=1;
		    }
		}
		if(top||er)
		{
			cout<<"ERR\n";
			continue;
		}
		if(hour==judge)  cout<<"Yes\n";
		else              cout<<"No\n";
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值