Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.57 KB | None | 0 0
  1.     #include<iostream>
  2.     #include<sstream>
  3.     #include<string>
  4.     #include<cstdlib>
  5.     #include<vector>
  6.     #include<map>
  7.     #include<queue>
  8.     #include<stack>
  9.     #include<cmath>
  10.     #include<cctype>
  11.     #include<set>
  12.     #include<bitset>
  13.     #include<algorithm>
  14.     #include<list>
  15.      
  16.     #include<stdio.h>
  17.     #include<string.h>
  18.     #include<stdlib.h>
  19.     #include<math.h>
  20.     #include<ctype.h>
  21.     using namespace std;
  22.     typedef long long int ll;
  23.     #define PI           3.14159265358979323846
  24.     struct node{
  25.         int x,y;
  26.     }res[110][110];
  27.   string s1,s2,ss1,ss2;
  28.   bool vis[110][110];
  29.   string ans;
  30.   int dp[110][110],mm[110][110];
  31.   void cal(int i,int j)
  32.   {
  33.      if(dp[i][j]==0)
  34.      return ;
  35.      if(vis[i][j]==1)
  36.      {  
  37.            
  38.              ans+=s1[i];
  39.           cout<<ans<<endl;
  40.      }
  41.      
  42.      cal(res[i][j].x,res[i][j].y);
  43.      
  44.   }
  45.     int main()
  46.     {  
  47.            //freopen("0in.txt","r",stdin);
  48.            //freopen("0out.txt","w",stdout);
  49.           int tcase,t,i,j,cnt,end,l1,l2;
  50.            
  51.           scanf("%d",&tcase);
  52.           for(t=1;t<=tcase;t++)
  53.           {  
  54.               cin>>ss1>>ss2;
  55.               s1="";
  56.               s2="";
  57.              
  58.               char ch='z'+1;
  59.               s1 = "#"+ss1;
  60.               s2 = "#"+ss2;
  61.               l1 = ss1.size();
  62.               l2 = ss2.size();
  63.               memset(dp,0,sizeof dp);
  64.               for(i=0;i<=l1;i++)
  65.               mm[i][0]='z'+1;
  66.               for(i=0;i<=l2;i++)
  67.               mm[0][i]='z'+1;
  68.               for(i=1;i<=l1;i++)
  69.               {
  70.                 for(j=1;j<=l2;j++)
  71.                 {  
  72.                     vis[i][j] = 0;
  73.                     res[i][j].x=0;
  74.                     res[i][j].y = 0;
  75.                    if(s1[i]==s2[j])
  76.                     {
  77.                             dp[i][j] = dp[i-1][j-1] + 1;
  78.                            
  79.                     }
  80.                     else
  81.                     {
  82.                             dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
  83.                     }  
  84.                 }
  85.              }
  86.              for(i=0;i<=l2;i++)
  87.              cout<<s2[i]<<" ";
  88.              cout<<endl;
  89.              
  90.              for(i=1;i<=l1;i++)
  91.              {
  92.                 cout<<s1[i]<<" ";
  93.                  for(j=1;j<=l2;j++)
  94.                  {
  95.                     if(s1[i]==s2[j])
  96.                      {
  97.                         res[i][j].x = i-1;
  98.                         res[i][j].y = j-1;
  99.                         vis[i][j] = 1;
  100.                         mm[i][j]=s1[i]-96;
  101.                         cout<<"A"<<" ";
  102.                      }   
  103.                      else if(dp[i-1][j]==dp[i][j-1])
  104.                      {
  105.                          if(mm[i][j-1]<mm[i-1][j])
  106.                          {
  107.                             res[i][j].x = i;
  108.                             res[i][j].y = j-1;
  109.                             mm[i][j]=mm[i][j-1];
  110.                             cout<<"L"<<" ";
  111.                          }
  112.                          else
  113.                          {
  114.                              res[i][j].x = i-1;
  115.                              res[i][j].y = j;
  116.                              mm[i][j]=mm[i-1][j];
  117.                              cout<<"U"<<" ";
  118.                          }
  119.                      }
  120.                      else
  121.                      {
  122.                          if(dp[i-1][j]>dp[i][j-1])
  123.                          {
  124.                             res[i][j].x = i-1;
  125.                             res[i][j].y = j;
  126.                             mm[i][j]=mm[i-1][j];
  127.                             cout<<"U"<<" ";
  128.                           }
  129.                           else{
  130.                          
  131.                              res[i][j].x = i;
  132.                             res[i][j].y = j-1;
  133.                             mm[i][j]=mm[i][j-1];
  134.                             cout<<"L"<<" ";
  135.                         }
  136.                      }
  137.                  }
  138.                  cout<<endl<<endl;
  139.              }
  140.              
  141.              
  142.              ans = "";
  143.              //cal(l1,l2);
  144.              i=l1;
  145.              j=l2;
  146.              
  147.              while(dp[i][j]!=0)
  148.              {
  149.                
  150.      if(vis[i][j]==1)
  151.      {  
  152.            
  153.              ans=s1[i]+ans;
  154.          
  155.      }
  156.      i=res[i][j].x;j=res[i][j].y;
  157.              }
  158.              cout<<ans<<endl;
  159.                
  160.            
  161.           }
  162.                
  163.              
  164.     return 0;
  165.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement