CCF计算机软件能力认证 C++ 模板生成系统
问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
最终运行结果90分,超时。第二次90分超时情况,看大多都用字符数组,string会更费时吗?
[code]#include<iostream> #include<string> #include <cctype> #include <algorithm> #include <map> #include <set> #include <vector> #include <cmath> using namespace std; map<string,string> m; vector<string> v; int main() { int n,mm; cin>>n>>mm; string s; cin.get(); for(int i=0;i<n;++i) { getline(cin,s); v.push_back(s); } string a,b,c; for(int i=0;i<mm;++i) { cin>>a; getline(cin,b); for(int i=0;i<b.size();++i) { if(b[i]!='"') { b.erase(b.begin()); --i; } else { b.erase(b.begin()); break; } } for(int i=b.size()-1;i>=0;--i) { if(b[i]!='"') { b.erase(b.begin()+i); } else { b.erase(b.begin()+i); break; } } m[a]=b; } int last; string sleft="{{ "; string sright=" }}"; for(int i=0;i<n;++i) { int kleft=v[i].find(sleft); while(kleft>=0) { int kright=v[i].find(sright); if(kright>kleft) { string sss(v[i],kleft+3,kright-kleft-3); v[i].erase(kleft,sss.size()+6); if(m.find(sss)!=m.end()) v[i].insert(kleft,m[sss]); } kleft=v[i].find(sleft); } } for(int i=0;i<n;++i) cout<<v[i]<<endl; return 0; }
阅读更多
- 2015年9月CCF计算机软件能力认证题:模板生成工具
- CCF计算机软件能力认证 C++ 炉石传说
- CCF计算机软件能力认证 C++ 画图
- CCF计算机软件能力认证 C++ Markdown
- CCF计算机软件能力认证 C++ 路径解析
- CCF计算机软件能力认证考试-201412-1-门禁系统
- CCF计算机软件能力认证 C++ 权限查询
- CCF计算机软件能力认证试题练习-门禁系统(Java参考答案学习记录)
- CCF计算机软件能力认证 C++ 俄罗斯方块
- CCF计算机软件能力认证试题练习201312-1-出现次数最多的数
- 2015年3月CCF计算机软件能力认证题:数字排序
- 第四次CCF计算机软件能力认证考试题解(Java)--201503--节日--100分通过
- 2015年3月CCF计算机软件能力认证题:节日
- CCF计算机软件能力认证试题练习-数位之和(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-相反数(Java参考答案学习记录)
- 2015年3月CCF计算机软件能力认证题:图像旋转
- 201312-1出现次数最多的数——CCF计算机软件能力认证试题历届真题
- 201604-1折点计数——CCF计算机软件能力认证试题历届真题
- 第三次CCF计算机软件能力认证题目:Z字形扫描等(Java)
- 201512-1数位之和——CCF计算机软件能力认证试题历届真题