Cod sursa(job #1307438)

Utilizator DjokValeriu Motroi Djok Data 2 ianuarie 2015 09:38:52
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<fstream>
#include<algorithm>
#include<string>
using namespace std;

int i,j,n,m,rs,dp[505][505];
string a,b,s;

bool match(int x) {
     int i=0;
     for(i=0;i<m;++i)
     if(a[x+i]!=s[i]) return 0;
     return 1;
}

int main()
{
  ifstream cin("subsir.in");
  ofstream cout("subsir.out");

  getline(cin,a); n=a.length();
  getline(cin,b); m=b.length();

  for(i=1;i<=n;++i)
   for(j=1;j<=m;++j)
   if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
   else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

   i=n; j=m;
   while(i>0 && j>0)
   if(a[i-1]==b[j-1]) s+=a[--i],--j;
   else if(dp[i-1][j]<dp[i][j-1]) --i; else --j;

   for(i=0;i<n;++i)
   if(match(i)) ++rs;

   cout<<rs<<'\n';

 return 0;
}