模拟题,细心,瞎搞。。。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版权协议,转载请附上原文出处链接和本声明。