Advertisement
Serega

Binary Key

Jul 24th, 2013
824
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <cmath>
  7. using namespace std;
  8.  
  9. bool d[2050][250];
  10. bool pr[2050][250];
  11.  
  12. int main()
  13. {
  14.     string p, s;
  15.     getline(cin, p);
  16.     getline(cin, s);
  17.     int k;
  18.     cin >> k;
  19.     string result = "";
  20.     for (int cnt = 1; cnt <= min(k, (int)s.length()); ++cnt)
  21.     {
  22.         if (p.length() / k * cnt > s.length())  
  23.             break;  
  24.         d[k][cnt] = true;
  25.         for (int j = 0; j < cnt; ++j)
  26.             d[k][j] = false;
  27.         for (int i = k - 1; i >= 0; --i)
  28.         {
  29.             d[i][cnt] = true;
  30.             pr[i][cnt] = false;
  31.             for (int j = cnt - 1; j >= 0; --j)
  32.             {
  33.                 d[i][j] = false;
  34.                 if (d[i + 1][j])
  35.                 {
  36.                     d[i][j] = true;
  37.                     pr[i][j] = false;
  38.                 }
  39.                 else
  40.                     if (d[i + 1][j + 1])
  41.                     {
  42.                         bool yes = true;
  43.                         for (int cur1 = j, cur2 = i; cur1 < s.length() || cur2 < p.length(); cur1 += cnt, cur2 += k)
  44.                             if (cur1 >= s.length() || cur2 >= p.length() || s[cur1] != p[cur2])
  45.                             {
  46.                                 yes = false;
  47.                                 break;
  48.                             }
  49.                         if (yes)
  50.                         {
  51.                             d[i][j] = true;
  52.                             pr[i][j] = true;
  53.                         }
  54.                     }
  55.             }
  56.         }
  57.         if (!d[0][0])
  58.             continue;
  59.         string ans;
  60.         int j = 0;
  61.         for (int i = 0; i < k; ++i)
  62.             if (pr[i][j])
  63.             {
  64.                 ans += '1';
  65.                 ++j;
  66.             }
  67.             else
  68.                 ans += '0';
  69.         if (result == "" || ans < result)
  70.         result = ans;
  71.     }
  72.     if (result == "")
  73.         cout << 0 << endl;
  74.     else
  75.         cout << result << endl;
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement