Advertisement
shek_shek

acm.sgu.ru/lang 2048

Sep 4th, 2014
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stack>
  3. #include<math.h>
  4. #include<time.h>
  5. #include<iostream>
  6. #include<algorithm>
  7. #include<string>
  8. #include<set>
  9. #include<iomanip>
  10. #include<vector>
  11. #include<map>
  12. #include<cassert>
  13. #include<queue>
  14. #include <tuple>
  15.  
  16.  
  17. using namespace std;
  18.  
  19. typedef long long li;
  20. typedef long double ld;
  21.  
  22. #define forn(i, n) for (int i = 0; i < int(n); ++i)
  23. #define pb push_back
  24. #define mp make_pair
  25. #define shek_shek _DEBUG
  26. #define mt make_tuple
  27. #define aaaa(n) get<(n)>(aaaa)
  28. #define all(v) v.begin(),v.end()
  29. #define EPS  1e-9
  30. #define PI 3.1415926535897932384626433832795
  31.  
  32. map <string, int> roots;
  33. map <string, set <string>> v;
  34.  
  35. int depth = 0;
  36.  
  37. void dfs(string s) {
  38.     forn (i, depth)
  39.         cout << '+';
  40.         cout << s << endl;
  41.     if (v[s].empty())
  42.         return;
  43.     for (set <string> :: iterator it = v[s].begin(); it != v[s].end(); it++) {
  44.         depth++;
  45.         dfs(*it);
  46.         depth--;
  47.     }
  48. }
  49.  
  50. int main () {
  51. #ifdef shek_shek
  52.     freopen("input.txt", "r", stdin);
  53.     freopen("output.txt", "w", stdout);
  54. #endif
  55.     int n;
  56.     cin >> n;
  57.     forn (i, n) {
  58.         string s, prev = "", tek = "";
  59.         cin >> s;
  60.         forn (j, s.size()) {
  61.             if (s[j] == '/' || j == s.size() - 1) {
  62.                 if (j == s.size() - 1)
  63.                     tek += s[j];
  64.                 if (prev.empty() && roots[tek] == 0)
  65.                     roots[tek] = 0;
  66.                 if (!prev.empty()) {
  67.                     v[prev].insert(tek);
  68.                     roots[tek]++;
  69.                 }
  70.                 prev = tek, tek = "";
  71.             } else
  72.                 tek += s[j];
  73.         }
  74.     }
  75.     bool ok = true;
  76.     while (ok) {
  77.         ok = false;
  78.         for (map <string, int> :: iterator it = roots.begin(); it != roots.end(); it++) {
  79.             if ((*it).second != 0) {
  80.                 ok = true;
  81.                 roots.erase(it);
  82.                 break;
  83.             }
  84.         }
  85.     }
  86.     for (map <string, int> :: iterator it = roots.begin(); it != roots.end(); it++) {
  87.         dfs((*it).first);
  88.     }
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement