201809-3 元素选择器

模拟题,细心细心再细心,整个结构是一个树型的结构。

 

#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;

char s[109][89];

char qq[89];

int id_qi[109];//记录每个标签的id起始点,没有则为0;

int dian[109];//记录s[i]的点的个数;
int a[109];//记录每次查询的结果;

int v[109];//多级查询时,分割串;



int main(){
    int n,q;
    scanf("%d%d",&n,&q);
    getchar();
    for(int i=1; i<=n; ++i){
        fgets(s[i],89,stdin);
        int t=strlen(s[i]);
        --t;
        s[i][t]='\0';//fgets()使用时会多吸收一个换行符到字符串中,所以需要将长度减一;
        int j=0;
        for(; j='A'&&s[i][j]<='Z')//将标签变为小写字母;
                s[i][j]+=32;
        }
    }


    while(q--){
        int l=0;
        fgets(qq,89,stdin);
        int lq=strlen(qq);
        --lq;
        qq[lq]='\0';

        //分割串;
        int h=0;
        v[0]=0;
        int lv=1;
        for(int i=0; i=v[k+1]-1&&j>=len){
                        qqdian=dian[i];
                        ++k;
                        ++i;
                        continue;
                    }

                }
                else{
                    int j=dian[i];
                    len=(id_qi[i]?id_qi[i]-1:len);//该标签有id的话,匹配时去掉标签;
                    //cout<='A'&&qq[z]<='Z')
                            qq[z]+=32;
                        if(qq[z]!=s[i][j])
                            break;
                    }
                    if(z>=v[k+1]-1&&j>=len){
                        qqdian=dian[i];
                        ++k;
                        ++i;
                        continue;
                    }
                }
                ++i;

            }
            if(qq[v[k]]=='#'){
                while(i<=n){
                    if(id_qi[i]==0||dian[i]<=qqdian){
                        ++i;
                        continue;
                    }
                    int j=id_qi[i];
                    int len=strlen(s[i]);
                    int z;
                    for(z=v[k]; z=lq&&j>=len){
                        a[t]=i;
                        ++t;
                    }
                    ++i;

                }
            }
            else{
                while(i<=n){
                    if(dian[i]<=qqdian){
                        ++i;
                        continue;
                    }
                    int len=strlen(s[i]);
                    len=(id_qi[i]?id_qi[i]-1:len);
                    int j=dian[i];
                    int z;
                    for(z=v[k]; z='A'&&qq[z]<='Z')
                            qq[z]+=32;
                        if(qq[z]!=s[i][j])
                            break;
                    }
                    if(z>=lq&&j>=len){
                        a[t]=i;
                        ++t;
                    }
                    ++i;
                }
            }
            printf("%d",t);
            for(int i=0; i='A'&&qq[k]<='Z')
                        qq[k]+=32;
                    if(s[i][j]!=qq[k]){
                        f=0;
                        break;
                    }
                }
                if(k

 

你可能感兴趣的:(csp)