Guest User

Untitled

a guest
Jun 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define inf 1<<29
  8. #define pii pair<int,int>
  9. #define mod 1000000007
  10.  
  11. char A[102],B[102],C[302];
  12. int is[102][102][302][2], cs;
  13. pii dp[102][102][302][2];
  14.  
  15. pii make(int posa,int posb,int posc,int matched,char now)
  16. {
  17.     if(!A[posa] && !B[posb] && !matched)
  18.         return make_pair(0,1);
  19.     if(!C[posc])
  20.         return make_pair(inf,0);
  21.  
  22.     if(is[posa][posb][posc][matched] == cs)
  23.         return dp[posa][posb][posc][matched];
  24.  
  25.     is[posa][posb][posc][matched] = cs;
  26.     dp[posa][posb][posc][matched] = make_pair(inf,0);
  27.  
  28.     pii temp;
  29.  
  30.     if(matched)
  31.     {
  32.         if(C[posc]==now)
  33.         {
  34.             temp = make(posa,posb,posc+1,!matched,now);
  35.             if(temp.first<dp[posa][posb][posc][matched].first)
  36.                 dp[posa][posb][posc][matched] = temp;
  37.         }
  38.         else
  39.         {
  40.             temp = make(posa,posb,posc+1,matched,now);
  41.             if(temp.first<dp[posa][posb][posc][matched].first)
  42.                 dp[posa][posb][posc][matched] = temp;
  43.         }
  44.     }
  45.  
  46.     else
  47.     {
  48.         if(A[posa]==B[posb])
  49.         {
  50.             temp = make(posa+1,posb+1,posc,!matched,A[posa]);
  51.             temp.first++;
  52.             if(temp.first<dp[posa][posb][posc][matched].first)
  53.                 dp[posa][posb][posc][matched] = temp;
  54.     //      else if(temp.first == dp[posa][posb][posc][matched].first)
  55.     //          dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
  56.         }
  57.         else
  58.         {
  59.             temp = make(posa+1,posb,posc,!matched,A[posa]);
  60.             temp.first++;
  61.             if(temp.first<dp[posa][posb][posc][matched].first)
  62.                 dp[posa][posb][posc][matched] = temp;
  63.         //  else if(temp.first == dp[posa][posb][posc][matched].first)
  64.         //      dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
  65.  
  66.             temp = make(posa,posb+1,posc,!matched,B[posb]);
  67.             temp.first++;
  68.             if(temp.first<dp[posa][posb][posc][matched].first)
  69.                 dp[posa][posb][posc][matched] = temp;
  70.             else if(temp.first == dp[posa][posb][posc][matched].first)
  71.                 dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
  72.         }
  73.     }
  74.  
  75.     return dp[posa][posb][posc][matched];
  76. }
  77.  
  78. int main()
  79. {
  80.     int t;
  81.     scanf("%d",&t);
  82.     for(cs=1;cs<=t;cs++)
  83.     {
  84.         scanf("%s%s%s",A,B,C);
  85.         pii got = make(0,0,0,0,'W');
  86.         printf("Case %d: %d\n",cs,got.second);
  87.  
  88.         if(got.first == inf)
  89.         {
  90.             printf("NOT FOUND\n");
  91.             continue;
  92.         }
  93.  
  94.         int v = got.first,i;
  95.         while(v)
  96.         {
  97.             int posa = 0, posb = 0, posc = 0, matched = 0;
  98.             for(i='a';i<='z';i++)
  99.  
  100.         }
  101.     }
  102.     return 0;
  103. }
Add Comment
Please, Sign In to add comment