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]);
}

Download