博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014牡丹江——Hierarchical Notation
阅读量:6202 次
发布时间:2019-06-21

本文共 3185 字,大约阅读时间需要 10 分钟。

字符串模拟

const int MAXN = 2000000;char ipt[MAXN], t[MAXN];int f[MAXN], len, to[MAXN];map
mp[MAXN];string x, key, ans;string i2s(int n){ string ret = ""; if (n == 0) ret += '0'; else { while (n) { ret += n % 10 + '0'; n /= 10; } } ret += '*'; reverse(ret.begin(), ret.end()); return ret;}int s2i(string& s){ int ret = 0; FF(i, 1, s.length()) ret = ret * 10 + s[i] - '0'; return ret;}void fun_f(){ stack
sk; sk.push(0); int cnt = 0; REP(i, len) { if (ipt[i] == '{') { sk.push(++cnt); f[i] = cnt; to[f[i]] = i; } else if (ipt[i] == '}') { sk.pop(); f[i] = sk.top(); } }}void fun_ipt(){ int state = 0, lv = 0, nxt; REP(i, len) { switch (ipt[i]) { case '\"': if (state == 0 || state == 2) x = "\""; else if (state == 1) key = x + '\"'; else mp[lv][key] = x + '\"'; state = (state + 1) % 4; break; case '{': nxt = f[i]; if (state == 2) { mp[lv][key] = i2s(nxt); state = 0; } lv = nxt; break; case '}': lv = f[i]; break; case ':' || ',': break; default: x += ipt[i]; } }}void fun_case(){ int state = 0, lv = 0, n; RI(n); REP(kase, n) { bool ok = true; state = 0, lv = 1; RS(t); len = strlen(t); REP(i, len) { if (t[i] == '\"') { if (state == 0) x = '\"'; else { x += '\"'; if (mp[lv].count(x) == 0) { ok = false; break; } } ans = mp[lv][x]; state = !state; } else if (t[i] == '.') { if (ans[0] != '*') { ok = false; break; } lv = s2i(ans); } else x += t[i]; } if (ok) { if (ans[0] == '*') { int i = to[s2i(ans)], cnt = 0; while (true) { if (ipt[i] == '{') cnt++; else if (ipt[i] == '}') { if (--cnt == 0) break; } putchar(ipt[i]); i++; } puts("}"); } else puts(ans.c_str()); } else puts("Error!"); }}int main(){ int T; RI(T); while (T--) { REP(i, MAXN) mp[i].clear(); RS(ipt); len = strlen(ipt); fun_f(); fun_ipt(); fun_case(); } return 0;}

转载地址:http://eqtca.baihongyu.com/

你可能感兴趣的文章
观察者模式
查看>>
【linux】VMware12.0安装
查看>>
cdn提供商
查看>>
[linux]BASH 的基本语法
查看>>
你真的会用Gson吗?Gson使用指南
查看>>
Linux下C编程的学习_1
查看>>
Http标准协议Android网络框架——NoHttp
查看>>
CathyCMS-后台管理v1.0
查看>>
redis的安装
查看>>
Zookeeper源码编译为Eclipse工程(win7下Ant编译)
查看>>
Spring Boot 2.0 学习专栏
查看>>
VIM Quick Reference Card
查看>>
[Python]datetime常用的几个操作
查看>>
WCF学习心得--客户端获取服务端自定义类数据
查看>>
C#中的线程四(System.Threading.Thread)
查看>>
【187】◀▶ 编辑博客的文本格式 & 装饰
查看>>
Android解析服务器Json数据实例
查看>>
【Nodejs】使用nimble串行化回调任务
查看>>
Redis介绍、安装部署、操作
查看>>
css网页布局教程:弹性+固宽布局
查看>>