AOJ 2534 Dictionary
来源:互联网 发布:类似于知乎的网站 编辑:程序博客网 时间:2024/05/29 03:08
Aizu 2534
题意:给n个字符串,问是否存在一个合法的字典,使得这些字符串是字典序递增的。
对相邻两个字符串的第一个不相等字符建边,拓扑排序即可。
注意边界判断。
#include <bits/stdc++.h>using namespace std;const int MAXN=505;char str[MAXN][15];int in[26];bool used[26][26];int main(){ int n, cnt; queue<int> q; while(cin>>n&&n){ memset(in,0,sizeof in); memset(used,0,sizeof used); bool flag=true; for(int i=0; i<n; i++){ scanf("%s",str[i]); int len=strlen(str[i]); if(i&&flag){ for(int k=0; k<len; k++){ if(str[i][k]==str[i-1][k]){ continue; } if(!str[i-1][k]) goto ok; int s1=str[i-1][k]-'a', s2=str[i][k]-'a'; if(used[s2][s1]) flag=false; if(!used[s1][s2]){ used[s1][s2]=true; in[s2]++; } goto ok; } if(str[i-1][len]) flag=false; ok:; } } if(!flag) goto failed; while(!q.empty()) q.pop(); for(int i=0; i<26; i++){ if(in[i]==0){ q.push(i); } } cnt=0; while(!q.empty()){ int now=q.front(); q.pop(); for(int i=0; i<26; i++){ if(used[now][i]){ in[i]--; if(in[i]==0){ q.push(i); } } } cnt++; } if(cnt!=26) goto failed; puts("yes"); continue; failed:; puts("no"); } return 0;}
0 0
- AOJ 2534 Dictionary
- AOJ
- Aoj
- Dictionary
- dictionary
- Dictionary
- Dictionary
- dictionary
- Dictionary
- Dictionary
- dictionary
- Dictionary
- Dictionary
- Dictionary
- Dictionary
- AOJ E
- AOJ I
- AOJ J
- android webview使用记录
- Apache开启mod_deflate压缩网页后输出
- 每天工作计划
- [C++11 并发编程] 14 关联任务与期望
- JSONUtils 工具类
- AOJ 2534 Dictionary
- 学习JS(7)
- strstr函数的自己实现
- 6天通吃树结构—— 第五天 Trie树
- 复制DataTable时出现"该行已经属于另一个表"异常的解决办法
- 网站搭建过程中后台相关 随笔
- 求果园中在t*s的矩阵里最多能有几棵柿子树 二维树状数组模板题 poj 2029 Get Many Persimmon Trees
- 移动端购物车的实现
- 数字处理类