91pts求助!
查看原帖
91pts求助!
1126361
zzx0714楼主2023/10/14 19:01

求助,已经被这道题卡了一天了,#10 WA,其它的 AC。

下了 33 个数据点,现在不让下了。

#include<bits/stdc++.h>
#define int long long
#define N 114514
#define inf 0x7fffffff
#define il inline
using namespace std;
inline int read()
{
	int n=0,f=1;
	char c=getchar();
	while(c<'0' || c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0' && c<='9') n=(n<<3)+(n<<1)+(c^48),c=getchar();
	return n*f;
}
inline void write(int x)
{
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10);
	putchar(x%10^48);
	return;
}
int n;
int ma[200];
struct node
{
    char type,id;
    int l,r,w;
    bool is;
}a[105];
il int init_w()
{
    char c;
    int res;
    scanf("O(%c",&c);
    if(c=='1') getchar(),res=0;
    else scanf("^%lld)",&res);
    return res;
}
il int to_num(int &ind,string s)
{
    int res=0,len=s.length();
    while(!isdigit(s[ind])&&ind<len)
    {
        if(s[ind]=='n')
        {
            ind++;
            return inf;
        }
        ind++;
    }
    while(isdigit(s[ind])) res=res*10+(s[ind]-'0'),ind++;
    return res;
}
il node init_s()
{
    node res;
    char c;
    cin>>c;
    if(c=='E') res.type='E';
    else
    {
        string s;
        getline(cin,s);
        res.type='F',res.id=s[1];
        int ind=3;
        res.l=to_num(ind,s),res.r=to_num(ind,s);
    }
    return res;
}
il bool CE()
{
    int i;
    stack<char>q;
    int F=0,E=0;
    for(i=1;i<=n;i++)
    {
        if(a[i].type=='E'&&F==0) return 1;
        else if(a[i].type=='F') F++;
        else E++;
    }
    if(F!=E) return 1;    
    for(i=1;i<=n;i++)
    {
        if(a[i].type=='F') q.push(a[i].id);
        else a[i].id=q.top(),q.pop();
    }
    for(i=1;i<=n;i++)
    {
        if(a[i].type=='F')
        {
            if(ma[(int)a[i].id]==1) return 1;
            else ma[(int)a[i].id]=1;
        }
        else ma[(int)a[i].id]=0;
    }
    return 0;
}
il int work_w(int x)
{
    int le=a[x].l,re=a[x].r;
    if(le==inf&&re==inf) return 0;
    if(le==inf) return inf;
    if(re==inf) return 1;
    if(le>re) return inf;
    else return 0;
}
il void used_work(int x)
{
    int E=0,F=0,i;
    for(i=x;i<=n;i++)
    {
        if(a[i].type=='E') E++;
        else F++;
        if(E==F) break;
    }
    int r=i;
    for(i=x;i<=r;i++) a[i].is=0;
}
signed main()
{
    stack<int>q;
    int T=read();
    while(T--)
    {
        memset(a,0,sizeof(a));
        while(!q.empty()) q.pop();
        int wp,i,j,maxn=0,O=0;
        n=read(),wp=init_w();
        getchar();
        for(i=1;i<=n;i++) a[i]=init_s();
        if(CE()) {puts("ERR");continue;}
        for(i=1;i<=n;i++) a[i].w=work_w(i),a[i].is=1;
        for(i=1;i<=n;i++) if(a[i].type=='F'&&a[i].w==inf&&a[i].is) used_work(i);
        for(i=1;i<=n;i++)
        {
            if(!a[i].is) continue;
            if(a[i].type=='F') q.push(a[i].w),O+=a[i].w;
            else
            {
                int ww=q.top();
                maxn=max(maxn,O);
                O-=ww;
                q.pop();
            }
        }
        if(maxn==wp) puts("Yes");
        else puts("No");
    }
	return 0;
}
2023/10/14 19:01
加载中...