codeforces 508D . Tanya and Password 欧拉通路
2015-12-26 13:41
183 查看
题目链接
给你n个长度为3的子串, 这些子串是由一个长度为n+2的串分割得来的, 求原串, 如果给出的不合法, 输出-1。
一个欧拉通路的题, 将子串的前两个字符和后两个字符看成一个点, 比如acb, 就是ac->cb。 然后建图。
给你n个长度为3的子串, 这些子串是由一个长度为n+2的串分割得来的, 求原串, 如果给出的不合法, 输出-1。
一个欧拉通路的题, 将子串的前两个字符和后两个字符看成一个点, 比如acb, 就是ac->cb。 然后建图。
#include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <string> #include <queue> using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x, y) make_pair(x, y) #define lson l, m, rt<<1 #define mem(a) memset(a, 0, sizeof(a)) #define rson m+1, r, rt<<1|1 #define mem1(a) memset(a, -1, sizeof(a)) #define mem2(a) memset(a, 0x3f, sizeof(a)) #define rep(i, n, a) for(int i = a; i<n; i++) #define fi first #define se second typedef pair<int, int> pll; const double PI = acos(-1.0); const double eps = 1e-8; const int mod = 1e9+7; const int inf = 1061109567; const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; map <string, int> ma; string a[400005]; int cnt, inde[400005], outde[400005], vis[400005*2], num, ans[2*400005], ecnt[66000]; vector <int> v[66000]; void dfs(int u) { while(ecnt[u]<v[u].size()) { dfs(v[u][ecnt[u]++]); } ans[num++] = u%256; } int main() { ios::sync_with_stdio(0); string s, tmp; int n, pos1, pos2; cin>>n; int cnt = 1, start; for(int i = 0; i<n; i++) { cin>>s; int u = 256*s[0]+s[1]; int to = 256*s[1]+s[2]; v[u].pb(to); inde[to]++; outde[u]++; start = u; } pos1 = -1, pos2 = -1; int flag = 0; for(int i = 1; i<66000; i++) { if(outde[i]!=inde[i]) { if(outde[i]==inde[i]+1) { if(pos1==-1) { pos1 = i; } else { flag = 1; } } else { if(pos2==-1) pos2=i; else flag = 1; } } } if(flag||(pos1==-1&&pos2!=-1||pos2==-1&&pos1!=-1)) { cout<<"NO"<<endl; return 0; } num = 0; if(pos1 == -1) pos1 = start; dfs(pos1); if(num != n+1) { puts("NO"); return 0; } s = "", tmp = ""; tmp = (char)(pos1/256); for(int i = num-1; i>=0; i--) { tmp += char(ans[i]); } cout<<"YES"<<endl; cout<<tmp; return 0; }
相关文章推荐
- HDU 1003:Max Sum【水】
- <php+mysql>PHP脚本对数据库的基本操作,查找,删除,循环输出
- VS project 根目录 配置OpenGL 相关库
- 微信分享失败之checkArgs fail, thumbData is invalid
- 【剑指offer】2.4.1查找和排序——面试题8:旋转数组的最小数字
- 与机器学习祖师爷 杰夫.辛顿 的交流
- OSGI blueprint Converter的使用
- 在 vSphere Web Client 中恢复孤立的虚拟机
- oc内存管理
- 既然流量劫持那么讨厌 那么大型互联网公司怎么解决
- 微软声学回声消除demo AECMicArray的使用
- 用类模板做的智能指针
- 第四章(数组) 编程题 1
- window7下安装第三方包报错及解决
- LINUX下安装U-MAIL邮件系统
- 第8次作业总结
- crm使用soap分配记录
- 2015总结
- Lock-Free
- 马哥linux学习笔记:源码编译安装