#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;
struct Node{
vector<string> v;
string name;
}a[105];
vector<string> org;
int n,m;
int judge(string t) {
bool flag = true;
for(int i = 0; i < t.length(); ++i) {
if(t[i] <'0' || t[i] >'9')
flag = false;
}
if(flag) return 1;
flag = true;
for(int i = 0; i < t.length(); ++i) {
if(!(t[i] == '_' || t[i] == '.' || t[i] == '-' || t[i] >= 'a' && t[i] <='z' || t[i] >= 'A' && t[i] <= 'Z' || t[i] >= '0' && t[i] <= '9'))
flag = false;
}
if(flag) return 2;
flag = true;
for(int i = 0; i < t.length(); ++i) {
if(!(t[i] == '_' || t[i] == '.' || t[i] == '-' || t[i] >= 'a' && t[i] <='z' || t[i] >= 'A' && t[i] <= 'Z' || t[i] >= '0' && t[i] <= '9' || t[i] == '/'))
flag = false;
}
if(flag)
return 3;
}
int main() {
scanf("%d%d", &n, &m);
string s1,s2;
for(int i = 0; i < n; ++i) {
cin >> s1 >> s2;
int pre = 1;
org.push_back(s1);
for(int k = 0; k < s1.length(); ++k) {
if(k && s1[k] =='/') {
a[i].v.push_back(s1.substr(pre,k-pre));
pre = k+1;
}
}
if(s1[s1.length()-1] != '/')
a[i].v.push_back(s1.substr(pre));
else
a[i].v.push_back("/");
a[i].name = s2;
}
vector<string> v;
for(int i = 0; i < m; ++i) {
cin >> s1;
bool fg = true;
for(int p = 0; p < s1.length(); ++p) {
if(!(s1[i] == '_' || s1[i] == '.' || s1[i] == '-' || s1[i] >= 'a' && s1[i] <='z' || s1[i] >= 'A'
&& s1[i] <= 'Z' || s1[i] >= '0' && s1[i] <= '9' || s1[i] == '/')) {
fg = false;
break;
}
}
if(!fg) {
cout <<"404" << endl;
continue;
}
v.clear();
int pre = 1;
for(int k = 0; k < s1.length(); ++k) {
if(k && s1[k] =='/') {
v.push_back(s1.substr(pre,k-pre));
pre = k+1;
}
}
if(s1[s1.length()-1] != '/')
v.push_back(s1.substr(pre));
else v.push_back("/");
bool match = false;
vector<string> ans;
for(int j = 0; j < n; ++j) {
int k = 0;
ans.clear();
if(a[j].v.size() == v.size()){
for(; k < v.size(); ++k) {
if(v[k] == a[j].v[k])
continue;
if(a[j].v[k] != "<int>" && a[j].v[k] != "<path>" && a[j].v[k] != "<str>")
break;
int cat = judge(v[k]);
if(cat == 1 && a[j].v[k] == "<int>" || cat == 2 && a[j].v[k] == "<str>" || cat == 3 && a[j].v[k] == "<path>") {
int p = 0;
if(cat == 1) {
for(; p < v[k].length() && v[k][p] == '0'; ++p);
// cout << p << endl;
}
string tt = v[k].substr(p);
ans.push_back(tt);
continue;
}
else break;
}
if(k == v.size()) {
cout << a[j].name ;
for(int p = 0; p < ans.size(); ++p)
cout <<" "<< ans[p];
puts("");
match = true;
break;
}
}
int pos = org[j].find("<path>");
if(pos != -1) {
bool f = true;
int p = 0;
for(; p < pos && p < s1.size(); ++p) {
if(org[j][p] != s1[p]) {
f = false;
break;
}
}
if(p < s1.size() && f) {
ans.push_back(s1.substr(p));
match = true;
cout << a[j].name;
for(int p = 0; p < ans.size(); ++p)
cout <<" "<< ans[p];
puts("");
}
}
if(match)
break;
}
if(!match)
cout <<"404" << endl;
}
return 0;
}
CCF URL映射(大模拟)
最新推荐文章于 2025-06-01 14:55:29 发布