Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <vector>
  6.  
  7. std::vector<char> g_priority[26] = {};
  8. bool g_visited[26] = {};
  9.  
  10. void PrintOrder(int cur);
  11.  
  12. int main() {
  13. char prev[21] = {};
  14. while (std::scanf("%s", prev) != EOF) {
  15. for (int i = 0; i < 26; ++i) {
  16. g_priority[i].clear();
  17. }
  18. std::memset(g_visited, 0, sizeof(g_visited));
  19.  
  20. bool check[26] = {};
  21. while (true) {
  22. char cur[21] = {};
  23. std::scanf("%s", cur);
  24. if (cur[0] == '#') {
  25. break;
  26. }
  27. std::size_t len = std::min(std::strlen(prev), std::strlen(cur));
  28. for (std::size_t i = 0; i < len; ++i) {
  29. int p = prev[i] - 'A', c = cur[i] - 'A';
  30. check[p] = check[c] = true;
  31. if (p != c) {
  32. g_priority[c].push_back(p);
  33. break;
  34. }
  35. }
  36. for (std::size_t i = 0; i <= strlen(cur); ++i) {
  37. prev[i] = cur[i];
  38. }
  39. }
  40.  
  41. for (int i = 0; i < 26; ++i) {
  42. if (check[i] == true) {
  43. PrintOrder(i);
  44. }
  45. }
  46.  
  47. std::puts("");
  48. }
  49. return EXIT_SUCCESS;
  50. }
  51.  
  52. void PrintOrder(int cur) {
  53. if (g_visited[cur] == false) {
  54. for (std::size_t i = 0; i < g_priority[cur].size(); ++i) {
  55. PrintOrder(g_priority[cur][i]);
  56. }
  57. std::putchar(cur + 'A');
  58. g_visited[cur] = true;
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement