华师一附中OI组
标题:
NOIP2017 时间复杂度 洛谷3952(Day1 T2)
[打印本页]
作者:
WWX
时间:
2018-6-5 17:44
标题:
NOIP2017 时间复杂度 洛谷3952(Day1 T2)
https://www.luogu.org/problemnew/show/P3952
题目很长,就不贴了
一道没有什么营养的大模拟
作者:
WWX
时间:
2018-6-5 17:45
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int T,L,MX,CNT,top;
bool ERR_;
struct Node
{
int id,step;
bool naive;
} data[110];
char s[10],s1[10],s2[10];
bool use[30];
inline int read()
{
int x=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
int main()
{
//freopen("complexity.in","r",stdin);
//freopen("complexity.out","w",stdout);
T=read();
while(T--)
{
MX=0;
top=0;
CNT=0;
ERR_=false;
memset(use,0,sizeof(use));
L=read();
scanf("%s",&s[0]);
if(s[2]=='1')
CNT=0;
else for(int i=4; s[i]>='0'&&s[i]<='9'; i++)
CNT=CNT*10+s[i]-'0';
while(L--)
{
char ch=getchar();
while(ch!='F'&&ch!='E')
ch=getchar();
if(ch=='E')
{
if(ERR_)
continue;
if(!top)
ERR_=true;
if(!ERR_)
{
use[data[top].id]=false;
top--;
}
}
else
{
while(ch<'a'||ch>'z')
ch=getchar();
if(!ERR_)
{
if(use[ch-'a'])
ERR_=true;
}
if(!ERR_)
{
top++;
data[top].id=ch-'a';
use[data[top].id]=true;
}
for(int i=0; i<=3; i++)
s1[i]=s2[i]='?';
scanf("%s%s",&s1[0],&s2[0]);
if(ERR_)
continue;
int L=0,R=0;
if(s1[0]=='n')
L=100;
else for(int i=0; s1[i]>='0'&&s1[i]<='9'; i++)
L=L*10+s1[i]-'0';
if(s2[0]=='n')
R=100;
else for(int i=0; s2[i]>='0'&&s2[i]<='9'; i++)
R=R*10+s2[i]-'0';
if(L>R)
data[top].naive=true;
else data[top].naive=data[top-1].naive;
if(L<100&&R==100&&!data[top].naive)
data[top].step=data[top-1].step+1;
else data[top].step=data[top-1].step;
MX=max(MX,data[top].step);
}
}
if(top)
ERR_=true;
if(ERR_)
cout<<"ERR"<<endl;
else if(MX==CNT)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
复制代码
作者:
吴语林
时间:
2018-7-30 00:08
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
char c[1000],code[100];
int n,w,le;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d ",&n);
gets(c);
w=0,le=strlen(c);
if(c[2]=='n')
for(int i=4;i<le&&isdigit(c[i]);i++)
(w*=10)+=(c[i]-'0');
stack<int> s;
int e=1,book[26]={0},ef[26]={0},now=0,flag=-1,res=0;
for(int i=1;i<=n;i++)
{
gets(code);
if(code[0]=='F')
{
int k=code[2]-'a';
s.push(k);
if(!book[k])
book[k]=1;
else
{
printf("ERR\n");
e=0;
for(int j=i+1;j<=n;j++)
gets(code);
break;
}
int a=0,b=0,j=4;
for(j=4;isdigit(code[j])||code[j]=='n';j++)
{
if(code[j]=='n')
a=1000000;
(a*=10)+=(code[j]-'0');
}
j++;
for(j;isdigit(code[j])||code[j]=='n';j++)
{
if(code[j]=='n')
b=1000000;
(b*=10)+=(code[j]-'0');
}
if(b-a>1000)
if(flag==-1)
{
now++;
res=max(res,now);
ef[k]=true;
}
if(a>b)
if(flag==-1) flag=k;
}
else if(code[0]=='E')
{
if(s.empty())
{
printf("ERR\n");
e=0;
for(int j=i+1;j<=n;j++)
gets(code);
break;
}
int k=s.top();
s.pop();book[k]=false;
if(flag==k)
flag=-1;
if(ef[k])
{
ef[k]=false;
now--;
}
}
}
if(e)
{
if(s.size())
printf("ERR\n");
else if(res==w)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2