中级农民
- 积分
- 119
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-8-23
- 最后登录
- 1970-1-1
|
Hi,根据lz的例子,简单地写了一下,监测结果是:
b
f
a
c
t
d- #define _USE_MATH_DEFINES
- #ifdef ONLINE_JUDGE
- #define FINPUT(file) 0
- #define FOUTPUT(file) 0
- #else
- #define FINPUT(file) freopen(file,"r",stdin)
- #define FOUTPUT(file) freopen(file,"w",stdout)
- #endif
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- #include <ctime>
- #include <set>
- #include <stack>
- #include <string>
- #include <map>
- #include <vector>
- #include <queue>
- #include <algorithm>
- #include <functional>
- typedef long long ll;
- static const int M = 300;
- static const int N = 10;
- static const int LEN = 1000010;
- static const int MAX = 0x7fffffff;
- static const int MIN = ~MAX;
- static const double EPS = 1e-7;
- char arr[N][M];
- int indegree[N];
- std::vector< std::map<int, int> > alphabet(27);
- void topologic_sort(int n)
- {
- std::queue<int> cur;
- std::vector<int> out;
- for (int i = 1; i<n; i++){
- if (indegree[i] == 0 && alphabet[i].size() != 0){
- cur.push(i);
- out.push_back(i);
- }
- }
- int ncount = 0;
- while (cur.empty() == false){
- int tmp = cur.front();
- cur.pop();
- ncount++;
- std::map<int, int>::iterator it = alphabet[tmp].begin();
- for (it = alphabet[tmp].begin(); it != alphabet[tmp].end(); it++) {
- if (--indegree[it->second] == 0){
- cur.push(it->second);
- out.push_back(it->second);
- }
- }
- }
- for (int i = 0; i < out.size(); i++) {
- printf("%c\n", out[i] + 'a' - 1);
- }
- }
- void solve(int n, int m)
- {
- for (int i = 0; i < m; i++) {
- scanf("%s", arr[i]);
- }
- char *prev_str = arr[0];
- size_t prev_len = strlen(prev_str);
- for (int i = 1; i < m; i++) {
- size_t len = std::min(prev_len, strlen(arr[i]));
- for (int j = 0; j < len; j++) {
- if (prev_str[j] != arr[i][j]) {
- int prev = prev_str[j] - 'a' + 1;
- int cur = arr[i][j] - 'a' + 1;
- if (alphabet[prev][cur] == 0) {
- alphabet[prev][cur] = cur;
- indegree[cur]++;
- }
- break;
- }
- }
- prev_str = arr[i];
- prev_len = len;
- }
- topologic_sort(27);
- for (int i = 0; i<n; i++){
- alphabet[i].clear();
- }
- }
- int main()
- {
- FINPUT("in.txt");
- FOUTPUT("out.txt");
- int n, m;
- while (scanf("%d %d ", &n, &m) != EOF) {
- solve(n, m);
- }
- return 0;
- }
复制代码 |
|