Advertisement
double_trouble

Кунн строки

Dec 3rd, 2015
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <vector>
  5. #include <cmath>
  6. #include <string>
  7. #include <algorithm>
  8. #include <string>
  9. #include <deque>
  10. #include <queue>
  11. #include <iomanip>
  12. #include <set>
  13. #include <map>
  14.  
  15. #define F first
  16. #define S second
  17.  
  18. using namespace std;
  19.  
  20. const long double eps2 = 0.0000005;
  21. const long double eps1 = 1e-5;
  22. const long double pi = 3.1415926535897932;
  23.  
  24. vector <int> used, p;
  25. vector <string> str;
  26. map<string, vector<int> > shrt;
  27.  
  28. bool try_kunn(int v)
  29. {
  30.     if (used[v])
  31.         return false;
  32.     used[v] = 1;
  33.     for (int i = 0; i < (shrt.begin() + v).size(); i++)
  34.     {
  35.         int to = shrt[v][i];
  36.         if (p[to] == -1 || try_kunn(p[to]))
  37.         {
  38.             p[to] = v;
  39.             return true;
  40.         }
  41.     }
  42.     return false;
  43. }
  44.  
  45. int main()
  46. {
  47.     ios_base::sync_with_stdio(0);
  48.     freopen("input.txt", "r", stdin);
  49.     //      freopen("output.txt", "w", stdout);
  50.  
  51.     int n;
  52.     cin >> n;
  53.     p.resize(n, -1);
  54.     str.resize(n);
  55.     string s, st;
  56.     int ans = 0;
  57.     for (int t = 0; t < n; t++)
  58.     {
  59.         cin >> str[t];
  60.         int k = str[t].size();
  61.         for (int i = 0; i < k + 3; i++)
  62.             for (int j = i + 1; j < k + 3; j++)
  63.                 for (int l = j + 1; l < k + 3; l++)
  64.                     for (int r = l + 1; r < k + 3; r++)
  65.                     {
  66.                         st = "";
  67.                         if (i < k)
  68.                             st = st + s[i];
  69.                         if (j < k)
  70.                             st = st + s[j];
  71.                         if (l < k)
  72.                             st = st + s[l];
  73.                         if (r < k)
  74.                             st = st + s[r];
  75.                         if (shrt[st].size() == 0 || shrt[st].back() != t)
  76.                         {
  77.                             shrt[st].push_back(t);
  78.                             /*ans++;
  79.                             cout << st << endl;*/
  80.                         }
  81.  
  82.                     }
  83.        
  84.     }
  85.     bool y;
  86.     int i = 0;
  87.     for (map<string, vector<int> > ::iterator ii = shrt.begin(); ii != shrt.end(); ii++)
  88.     {
  89.         used.assign(shrt.size(), 0);
  90.         y = try_kunn(i);
  91.         i++;
  92.         /*for (int i = 0; i < ii -> S.size(); i++)
  93.             cout << ii->S[i] << " ";
  94.             cout << endl;*/
  95.     }
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement