najimCseJu

Untitled

Jan 2nd, 2018
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define Mx 150
  4. int dp[Mx][Mx];
  5. string s;
  6. set<string>paths;
  7. int rec(int l,int r)
  8. {
  9.     if(l>=r)return 0;
  10.     int &ret = dp[l][r];
  11.     if(ret!=-1)return ret;
  12.     ret = 111111111;
  13.     if(s[l]==s[r])
  14.     {
  15.         ret = rec(l+1,r-1);
  16.     }
  17.     ret = min(ret,1+rec(l,r-1));
  18.     ret = min(ret,1+rec(l+1,r));
  19.     return ret;
  20. }
  21.  
  22. void getPaths(int l,int r,string &res)
  23. {
  24.     if(l>r)
  25.     {
  26.         return ;
  27.     }
  28.     vector<pair<int,pair<int,int>>>V;
  29.     if(s[l]==s[r])
  30.     {
  31.         V.push_back({rec(l+1,r-1),{s[l],0}});
  32.     }
  33.     V.push_back({1+rec(l,r-1),{s[r],1}});
  34.     V.push_back({1+rec(l+1,r),{s[l],2}});
  35.     sort(V.begin(),V.end());
  36.     char curChar = V[0].second.first;
  37.     int mv = V[0].second.second;
  38.     res+=curChar;
  39.     if(mv==0)getPaths(l+1,r-1,res);
  40.     else if(mv==1)getPaths(l,r-1,res);
  41.     else getPaths(l+1,r,res);
  42. }
  43. bool pal(string &x,int l,int r)
  44. {
  45.     return l>=r || pal(x,l+1,r-1);
  46. }
  47. int main()
  48. {
  49.     int kase,ks=1;
  50.     freopen("in_pal.txt","r",stdin);
  51.     freopen("out_pal.txt","w",stdout);
  52.     cin >> kase;
  53.     while(kase--)
  54.     {
  55.         cin >> s;
  56.         string cachex = s;
  57.         memset(dp,-1,sizeof dp);
  58.         cout << "Case " << ks << ": " << rec(0,s.length()-1) << " ";
  59.         //paths.clear();
  60.         string result = "";
  61.         getPaths(0,s.length()-1,result);
  62.         cout << result;
  63.         string finalResult = result;
  64.         int st;
  65.         if((s.length()+ rec(0,s.length()-1))&1)
  66.         {
  67.             st = result.length()-2;
  68.         }
  69.         else st = result.length()-1;
  70.  
  71.         for(int i=st; i>=0; i--){
  72.             finalResult+=result[i];
  73.             cout << result[i];
  74.         }
  75.         cout << endl;
  76.         ks++;
  77.         assert(pal(finalResult,0,finalResult.length()-1)==true);
  78.         //cout << st << " " << result<< endl;
  79.         //cout << "=>" << cachex << "<=" << endl;
  80.     }
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment