201803-3 URL映射

模拟题,细心,瞎搞。。。90分,剩下10分再说吧23333

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;

int n,m;

bool isnum(char c){
    if(c>='0'&&c<='9') return 1;
    return 0;
}

bool isletter(char c){
    if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1;
    return 0;
}

bool issign(char c){
    if(c=='-'||c=='.'||c=='_') return 1;
    return 0;
}

char p[109][109];
char r[109][109];
char q[109][109];
char t[109];
int len[109];


int p_cut[109][109];
int q_cut[109][109];


void cut(char s[],int k){
    int len=strlen(s);
    for(int i=0;i<len;++i)
        if(s[i]=='/')
            p_cut[k][++p_cut[k][0]]=i;

}

int check_out(char s[],int k){
    int len=strlen(s);
    for(int i=0;i<len;++i){
        if(s[i]=='/'){
            q_cut[k][++q_cut[k][0]]=i;
        }
        else if(!isnum(s[i])&&(!isletter(s[i]))&&(!issign(s[i]))) return 0;
    }
    return 1;

}
vector<char *> v;
int main(){
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;++i){
        scanf("%s%s",p[i],r[i]);
        cut(p[i],i);
        len[i]=strlen(p[i]);

    }
    for(int i=0;i<m;++i){
        scanf("%s",q[i]);
        int f=check_out(q[i],i);
        if(!f){//这里就判断了一下有没有不合法字符出现;
            printf("404\n");
            continue;
        }
        f=0;
        int q_len=strlen(q[i]);
        for(int id=0;id<n;++id){
            v.clear();
            int p_wei=p_cut[id][0];
            int q_wei=q_cut[i][0];
            int j=0;//q串的下标;
            int fg=0;
            int p_j=0;//p串下标;
            for(int k=1;k<=p_wei;++k){
                if(j>=q_len||p_j>=len[id]) break;
                int l=p_cut[id][k];
                int r=(k+1>p_wei?len[id]:p_cut[id][k+1]);
                //cout<<l<<" "<<r<<endl;
                int hhh=0;
                if(p[id][l+1]=='<'){//标签匹配;
                    if(p[id][p_j]=='/'&&q[i][j]=='/'){++p_j;++j;}
                    char* sb=new char[109];

                    if(p[id][l+2]=='i'){
                        int asdf=0;
                        while(j<q_len&&q[i][j]=='0'){ asdf=1; ++j;}
                        for(;j<q_len&&isnum(q[i][j]);++j){
                            sb[hhh++]=q[i][j];
                        }
                        if(!hhh){
                            if(asdf) sb[hhh++]='0';//000的情况
                            else{
                                fg=0;
                                break;
                            }
                        }
                        sb[hhh]='\0';
                        v.push_back(sb);
                    }
                    else if(p[id][l+2]=='s'){
                        for(;j<q_len&&q[i][j]!='/';++j){
                            sb[hhh++]=q[i][j];
                        }
                        sb[hhh]='\0';
                        v.push_back(sb);
                    }
                    else{
                        for(;j<q_len;++j)
                            sb[hhh++]=q[i][j];
                        sb[hhh]='\0';
                        v.push_back(sb);
                    }
                    p_j=r;//更新p串下标;
                }
                else{//普通字符匹配;
                    int x=l;
                    for(;x<r;++x,++j){
                        if(q[i][j]!=p[id][x]) break;
                    }
                    if(x!=r){
                        fg=0;
                        break;
                    }
                    else{
                        p_j=r;
                    }

                }

            }
            if(p_j==len[id]&&j==q_len){
                fg=1;
                printf("%s",r[id]);
            }

            if(fg){
                f=1;
                for(int xx=0;xx<v.size();++xx)
                    printf(" %s",v[xx]);
                printf("\n");
                break;
            }
        }
        if(!f)
            printf("404\n");
    }




    return 0;
}
/*
1 1
/articles/<int>/ year_archive
/articles/2004/
*/

 


版权声明:本文为chenyume原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。