Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- using namespace std;
- #define inf 1<<29
- #define pii pair<int,int>
- #define mod 1000000007
- char A[102],B[102],C[302];
- int is[102][102][302][2], cs;
- pii dp[102][102][302][2];
- pii make(int posa,int posb,int posc,int matched,char now)
- {
- if(!A[posa] && !B[posb] && !matched)
- return make_pair(0,1);
- if(!C[posc])
- return make_pair(inf,0);
- if(is[posa][posb][posc][matched] == cs)
- return dp[posa][posb][posc][matched];
- is[posa][posb][posc][matched] = cs;
- dp[posa][posb][posc][matched] = make_pair(inf,0);
- pii temp;
- if(matched)
- {
- if(C[posc]==now)
- {
- temp = make(posa,posb,posc+1,!matched,now);
- if(temp.first<dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched] = temp;
- }
- else
- {
- temp = make(posa,posb,posc+1,matched,now);
- if(temp.first<dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched] = temp;
- }
- }
- else
- {
- if(A[posa]==B[posb])
- {
- temp = make(posa+1,posb+1,posc,!matched,A[posa]);
- temp.first++;
- if(temp.first<dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched] = temp;
- // else if(temp.first == dp[posa][posb][posc][matched].first)
- // dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
- }
- else
- {
- temp = make(posa+1,posb,posc,!matched,A[posa]);
- temp.first++;
- if(temp.first<dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched] = temp;
- // else if(temp.first == dp[posa][posb][posc][matched].first)
- // dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
- temp = make(posa,posb+1,posc,!matched,B[posb]);
- temp.first++;
- if(temp.first<dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched] = temp;
- else if(temp.first == dp[posa][posb][posc][matched].first)
- dp[posa][posb][posc][matched].second = (dp[posa][posb][posc][matched].second + temp.second)%mod;
- }
- }
- return dp[posa][posb][posc][matched];
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- for(cs=1;cs<=t;cs++)
- {
- scanf("%s%s%s",A,B,C);
- pii got = make(0,0,0,0,'W');
- printf("Case %d: %d\n",cs,got.second);
- if(got.first == inf)
- {
- printf("NOT FOUND\n");
- continue;
- }
- int v = got.first,i;
- while(v)
- {
- int posa = 0, posb = 0, posc = 0, matched = 0;
- for(i='a';i<='z';i++)
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment