27分,AC#1#2#3,求调

P3952 [NOIP2017 提高组] 时间复杂度

xycsc23 @ 2024-10-04 17:37:33

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node{
    char c;
    int r;
};
int gi(string a){
    int s=0;
    for(int i=0;i<a.size();i++)
        s=s*10+(a[i]-'0');
    return s;
}
void slove(){
    stack<node> s;
    int l, w;
    char twob;
    scanf("%d O(%c", &l, &twob);
    if(twob=='1')
        w=0;
    else
        scanf("^%d", &w);
    scanf(")\n");
    int ma=0, m=0, g=0;
    map<char, bool> mp;
    bool f=false;
    while(l--){
        string sb;
        getline(cin, sb);
        if(sb[0]=='F'){
            // cout<<"qwq";
            if(mp.count(sb[2]) && mp[sb[2]]){
                f=true;
            }
            if(f)
                continue;

            if(g){
                g++;
                continue;
            }
            char r=sb[2];
            mp[r]=true;
            int x, y;
            if(sb[4]=='n')
                x=101, sb=sb.substr(6);
            else
                x=gi(sb.substr(4, sb.find(' ', 4)-4)), sb=sb.substr(sb.find(' ', 4)+1);
            if(sb=="n")
                y=101;
            else
                y=gi(sb);
            if(x==101){
                if(y==101)
                    s.push((node){0, r});
                else{
                    s.push((node){-1, r});
                    g=1;
                }
            }
            else{
                if(y==101){
                    s.push((node){1, r});
                    m++;
                }
                else if(x<y)
                    s.push((node){0, r});
                else
                    s.push((node){-1, r}), g=1;
            }
            ma=max(ma, m);
        }
        else{
            if(s.empty()){
                f=true;
            }
            if(f)
                continue;
            if(s.top().r==-1)
                g--;           
            else
                m-=s.top().r;
            mp[s.top().c]=false;
            s.pop();
        }
    }
    if(f || !s.empty())
        puts("ERR");
    else if(ma==w)
        puts("Yes");
    else
        puts("No");
}
int main(){
    int t;
    cin>>t;
    while(t--)
        slove();
    return 0;
}

by Cells @ 2024-10-24 18:52:34

@13548940890xyc 本人下载数据实测,在有字母 E 循环结束的时候没有把变量的使用从 true 变成 false,导致后面的全部输出 ERR


|