ZOJ 3826 Hierarchical Notation
2015-07-06 19:22
309 查看
HASH保存每个KEY对应的值的起始位置和结束位置,最后直接输出就可以了
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>#include<algorithm>using namespace std;long long mv;map<long long,pair<long long,long long> > G;string s;long long op(char n){ if(n>='0'&&n<='9')return n-'0'; else if(n>='A'&&n<='Z')return n-'A'+11; else if(n>='a'&&n<='z')return n-'a'+45; else if(n=='.')return 62; return 63;}void dfs(long long n){ long long temp=n; while(s[mv]!='}') { mv++; if(s[mv]=='}')return; n = temp; while(s[mv]!=':')n=n*123+op(s[mv++]); long long left = ++mv; if(s[mv]=='{') dfs(n*123+62); else while(s[mv+1]!=','&&s[mv+1]!='}')mv++; G = make_pair(left,mv); mv++; }}int main(){ long long T; cin >> T; while(T--) { cin >> s; mv = 0; G.clear(); dfs(0); long long n; cin >> n; while(n--) { string str; cin >> str; long long nu = 0; for(int i=0;i<str.length();i++) { nu=nu*123+op(str[i]); } if(G.count(nu)) { for(int i = G[nu].first;i<=G[nu].second;i++) cout<<s[i]; cout<<endl; } else cout<<"Error!"<<endl; } } return 0;}
相关文章推荐
- 获取操作系统位数失败之error C2065: 'PROCESSOR_ARCHITECTURE_AMD64' : undeclared identifier
- 八叉树 Octree
- c++中冒号(:)的作用
- 快速排序演示
- Number of 1 Bits
- 从医学的角度看恋爱
- C++中vector的排序问题
- 4个类型转换关键字
- jQuery.fill 数据填充插件
- Java知多少(完结)
- leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法
- hdu 4507 - 吉哥系列故事——恨7不成妻(数位dp)
- C++实现字符串之模式匹配(一)
- nyoj 1192——Salvation——————【搜索】
- Eclipseproject标准的文件夹层次
- 【从零单排之微软面试100题系列】04之二叉树中和为某一值的路径
- ClassesTest
- java 中构建可执行 jar 包的几种方式
- etl工具,kettle实现了周期
- ClassesTest