NKH - Tách Từ
Tác giả: hieult
Ngôn ngữ: C++
#include<cstdio>
#include<cmath>
#include<math.h>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
#define ep 0.00001
#define maxn 100111
#define oo 1111111111
#define modunlo 35000
#define mod 256
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
//#define g 9.81
double const PI=4*atan(1.0);
//#include<conio.h>
using namespace std;
typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;
int x;
string s1,s2,S;
int f[222][222];
vector<int> V;
int main(){
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);
memset(f,0,sizeof(f));
cin>>s1>>s2>>S;
int n = s1.length(), m = s2.length();
//cout<<s1<<endl<<s2<<endl<<S<<endl;
f[0][0] = 1;
for(int i = 0;i<=n;i++)
for(int j = 0;j<=m;j++){
if(i==0 && j==0);// continue;
else if(i==0){
if(s2[j-1]==S[j-1] && f[0][j-1]!=0)
f[0][j] = 2;
}
else if(j==0){
if(s1[i-1]==S[i-1] && f[i-1][0]!=0)
f[i][0] = 1;
}
else{
if(s2[j-1]==S[i+j-1] && f[i][j-1]!=0){
f[i][j] = 2;
}
else if(s1[i-1]==S[i+j-1] && f[i-1][j]!=0){
f[i][j] = 1;
// continue;
}
/*
else if(s2[j-1]==S[i+j-1] && f[i][j-1]!=0){
f[i][j] = 2;
}
*/
}
// printf("%d %d %d\n",i,j,f[i][j]);
}
int u = n, v = m;
while(u>0||v>0){
V.push_back(f[u][v]);
if(f[u][v]==1) u--;
else v--;
}
for(int i = V.size()-1;i>=0;i--) printf("%d",V[i]);
}