Advertisement
Infiniti_Inter

dawdwafcngvfmefd

May 16th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <iomanip>
  7. #include <algorithm>
  8. //https://codeforces.com/group/auuF4i8Rom/contest/238530/problem/D
  9.  
  10. using namespace std;
  11.  
  12. #define forn(i, n) for (int i = 0; i < (int) n; ++i)
  13.  
  14. int main() {
  15. #ifdef _DEBUG
  16.     freopen("input.txt", "r", stdin);
  17. #endif // _DEBUG
  18.  
  19.  
  20.     int n;
  21.     cin >> n;
  22.     vector<string> a(2 * n - 2);
  23.     string s1, s2, s3, s4;
  24.     s1 = s2 = s3 = s4 = "";
  25.     forn(i, 2 * n - 2)
  26.     {
  27.         cin >> a[i];
  28.         if (a[i].length() == 1)
  29.             if (s1.length() == 1)
  30.                 s2 = a[i];
  31.             else
  32.                 s1 = a[i];
  33.         if (a[i].length() == n - 1)
  34.             if (s3.length() == n - 1)
  35.                 s4 = a[i];
  36.             else
  37.                 s3 = a[i];
  38.     }
  39.     vector<string> t;
  40.     if (s1 + s3 == s4 + s2)
  41.         t.push_back(s1 + s3);
  42.     if (s1 + s4 == s3 + s2)
  43.         t.push_back(s1 + s4);
  44.     if (s2 + s3 == s4 + s1)
  45.         t.push_back(s2 + s3);
  46.     if (s2 + s4 == s3 + s1)
  47.         t.push_back(s2 + s4);
  48.     forn(k, t.size())
  49.     {
  50.         string s = t[k];
  51.         string rs = s;
  52.         rs.reserve();
  53.         vector<bool> used(n, 0);
  54.         vector<bool> usedIDX(2 * n - 2, 0);
  55.         vector<char> ans(2 * n - 2);
  56.  
  57.         int use = 0;
  58.         bool fl = true;
  59.         forn(i, 2 * n - 2)
  60.         {          
  61.             string cur = a[i];
  62.             if (used[cur.length()])
  63.                 continue;
  64.            
  65.             if (s.find(cur) == string::npos)
  66.             {
  67.                 fl = false;
  68.                 break;
  69.             }
  70.             used[cur.length()] = 1;
  71.             usedIDX[i] = 1;
  72.             use++;
  73.             ans[i] = 'P';
  74.         }
  75.        
  76.         forn(i, n)
  77.             used[i] = 0;
  78.  
  79.  
  80.         if (use != n - 1)
  81.             continue;
  82.         use = 0;
  83.         forn(i, 2 * n - 2)
  84.         {
  85.             string cur = a[i];
  86.             if (usedIDX[i])continue;
  87.             if (used[i])continue;
  88.             if (rs.find(cur) == string::npos)
  89.             {
  90.                 fl = false;
  91.                 break;
  92.             }
  93.             used[cur.length()] = 1;
  94.             use++;
  95.             ans[i] = 'S';
  96.         }
  97.         if (use != n - 1)
  98.             continue;
  99.         forn(i, 2 * n - 2)
  100.             cout << ans[i];
  101.         return 0;
  102.  
  103.     }
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement