后三个点。求大佬帮忙
查看原帖
后三个点。求大佬帮忙
270327
asd1926楼主2020/12/25 23:04
#include <iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int t,t1[150],cnt;
int flag[1000];
char o[150][100],p[1005][200];
int main()
{
    cin >> t;
    for(int i = 1; i <= t; i++)
    {
        int temp;
        cin >> t1[i] >> o[i];
        cin.get();
        temp = t1[i];
        while(temp--)
            cin.getline(p[++cnt],15);
    }
   int j=1,j2=0,temp=0,temp2=0,cnte=0,f=0,pow=0,cntloop=0;
   for(int i = 1; i <= t; i++)
    {
        memset(flag,0,sizeof(flag));
        cntloop = 0;
        temp = t1[i];
        cnte = f = 0;
        j2 = j;
        temp2 = temp;
        pow = 0;
        while(temp)
        {
            if(strcmp(p[j],"E") == 0)
                {
                    cnte++;
                    cntloop--;
                }
            else
            {
                cntloop++;
                if(flag[p[j][2]] == 1)
                {
                 //   cout<<p[j]<<" "<<p[j][2]<<" "<<cntloop<<endl;
                    f = 1;
                    j++;
                    break;
                }
                else
                    flag[p[j][2]] = 1;
            }
            if(cntloop == 1)
                memset(flag,0,sizeof flag);
            j++;
            temp--;
        }
        if(f||cnte*2 != t1[i])//语法判断
           {
               // cout<<"ERR"<<" f:"<<f<<" t:"<<t1[i]<<" cnte:"<<cnte<<endl;
                //cout<<"f:"<<f<<" cnte:"<<cnte<<" t1:"<<t1[i]<<endl;
                cout<<"ERR"<<endl;
           }
        else
        {
            string rgt, ltf;
            int onumber = 0;
            int maxpow = 0 ,flag = 1,cntloop=0;
            while( temp2 )
            {
                rgt.clear();
                ltf.clear();
                if(strcmp(p[j2], "E") == 0)
                {
                    if(cntloop > 0)
                        cntloop--;
                    flag = 1;
                    temp2--;
                    j2++;
                    continue;
                }
                int a = 4;
                while(p[j2][a] != ' ')
                    {
                        ltf += p[j2][a];
                        a++;
                    }
                    a++;
                    while(p[j2][a] !=' ' && p[j2][a] != '\0')
                    {
                        rgt += p[j2][a];
                        a++;
                    }
                if(ltf > rgt)
                {
                    flag = 0;//?
                    temp2--;
                    j2++;
                    continue;
                }
                if(ltf == rgt)
                {
                    temp2--;
                    j2++;
                    continue;
                }
                if(rgt == "n" && flag )//?????????并列情况
                   {
                       cntloop++;
                      // cout<<p[j2]<<endl;
                       pow = pow>cntloop?pow:cntloop;
                   }
                if(pow > maxpow )
                    maxpow = pow;
                temp2--;
                j2++;
            }

            if(o[i][2]=='n')
            {
                int len = strlen(o[i])-2,b=1,nn=0;
                while(o[i][len]>='0'&&o[i][len]<='9')
                {
                    for(int k=0; k < nn; k++)
                        b *= 10;
                    onumber += (o[i][len]-'0')*b;
                    nn++;
                    len--;
                }
                //cout<<"onumber:"<<onumber<<endl;
            }

            if(maxpow == 0 && o[i][2] == '1')
            {
                cout << "Yes"<<endl;
              //cout << "Yes :"<<o[i]<<" "<<maxpow<<endl;
            }
            else if(maxpow == 0 && o[i][2] != '1')
              {
                  cout << "No" << endl;
                //cout << "No :" <<o[i]<<" "<<maxpow<<endl;
              }
            else if ( maxpow !=0 && o[i][2] == 'n' &&onumber == maxpow)
               {
                   cout << "Yes" << endl;
                   //cout << "Yes :"<<o[i]<<" "<<maxpow<<endl;
               }
            else if( maxpow != 0 && o[i][2] == 'n' &&onumber != maxpow)
                {
                    cout << "No" << endl;
                    //cout << "No :" <<o[i]<<" "<<maxpow<<endl;
                }
            else if(maxpow !=0 && o[i][2] != 'n')
               {
                   cout << "No" << endl;
                   //cout << "No :" <<o[i]<<" "<<maxpow<<endl;
               }
         }
    }
    return 0;
}

2020/12/25 23:04
加载中...