链接:http://118.190.20.162/view.page?gpid=T71
思路: 按要求顺序写出n、m、p[i]、r[i]
接着每次输入一行匹配
将匹配的两个字符串进行切割,存入数组,逐一比对,符合要求就输出
题目本身不难吧,觉得复杂,不敢做,一点一点想清楚也挺舒服的,具体看代码吧,写了注释


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <algorithm> using namespace std; string p[150],r[150]; void split(vector<string> &v, string s) { //cout<<"s:"<<s<<endl; string ss; v.clear(); for(int i=1;i<s.size();i++) { //cout<<"ss:"<<ss<<endl; if(s[i]=='/') { v.push_back(ss); ss.clear(); } else ss+=s[i]; } if(ss.size()) v.push_back(ss); // for(vector<string>::iterator it=v.begin();it!=v.end();it++) // cout<<*it<<endl; } string judge(string s) { int t=0; for(int i=0;i<s.size();i++) { if(s[i]<'0'||s[i]>'9') { t=1; break; } } if(t==1) return "<str>"; else return "<int>"; } vector<string> ans; bool match(string s1,string s2)//s1是规则,s2是要对比的 { ans.clear();//每次将存储答案的数组清零 vector<string> r1,m1; int l=1; split(r1,s1);//切割字符串 split(m1,s2);//r1是规则,m1是查询字符串数组 //cout<<r1.size()<<endl<<m1.size()<<endl; if(r1.size()>m1.size())// return false; if(r1.size()<m1.size()&&r1.size()>=1) if(r1[r1.size()-1]!="<path>") return false; if(r1.size()==0&&m1.size()!=0) return false; for(int i=0;i<r1.size();i++) { //cout<<r1[i]<<endl; if(r1[i]==m1[i]) { l=l+m1[i].size()+1; continue; } else if(r1[i]=="<path>") { ans.push_back(s2.substr(l,s2.size()-l)); return true; } else if(r1[i]==judge(m1[i])) { ans.push_back(m1[i]); l=l+m1[i].size()+1; } else return false; } if(s1[s1.size()-1]=='/'&&s2[s2.size()-1]!='/') return false; if(s1[s1.size()-1]!='/'&&s2[s2.size()-1]=='/') return false; return true; } int convert(string s) { int ans=0; for(int i=0;i<s.size();i++) { ans=ans*10+(s[i]-'0'); } return ans; } int main() { int n,m; string s; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { cin>>p[i]>>r[i]; } for(int i=0;i<m;i++) { cin>>s; int flag=0; int j; for(j=0;j<n;j++) { flag=match(p[j],s);//将输入的s和前面n个规则比对 if(flag) break; } if(flag==0) { cout<<404<<endl; continue; } cout<<r[j]; for(int k=0;k<ans.size();k++) { if(judge(ans[k])=="<int>") cout<<" "<<convert(ans[k]); else cout<<" "<<ans[k]; } cout<<endl; } return 0; }
转载于:https://www.cnblogs.com/Rysort/p/9610741.html
最后
以上就是纯情金毛最近收集整理的关于CCF201803-3-URL映射的全部内容,更多相关CCF201803-3-URL映射内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复