Cod sursa(job #201860)

Utilizator piroslPiros Lucian pirosl Data 4 august 2008 14:15:12
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<iostream>
#include<string>
using namespace std;

int a[501][501];
int b[501][501];

int main(void)
{
	freopen("subsir.in", "r", stdin);
	freopen("subsir.out", "w", stdout);
	
	string s1;
	string s2;
	cin >> s1;
	cin >> s2;
	int l1 = s1.length();
	int l2 = s2.length();
	for(int i=0;i<=l1;++i)
	{
		a[i][0] = 0;
		b[i][0] = 0;
	}
	for(int i=0;i<=l2;++i)
	{
		a[0][i] = 0;
		b[0][i] = 0;
	}
	for(int i=1; i<=l1;++i) 
	{
		for(int j=1;j<=l2;++j)
		{
			if(s1.at(i-1) == s2.at(j-1)) 
			{
				a[i][j] = a[i-1][j-1];
				if(b[i-1][j-1] == 0)
					b[i][j] = 1;
				else
					b[i][j] = b[i-1][j-1];
			}else
			{
				if(a[i-1][j] > a[i][j-1]) 
				{
					a[i][j] = a[i-1][j];
					b[i][j] = b[i-1][j];
				}
				if(a[i-1][j] < a[i][j-1])
				{
					a[i][j] = a[i][j-1];
					b[i][j] = b[i][j-1];
				}
				if(a[i-1][j] == a[i][j-1])
				{
					a[i][j] = a[i-1][j];
					if(s1.at(i-1) != s2.at(j-1)) 
					{
						b[i][j] = b[i-1][j] + b[i][j-1] - b[i-1][j-1];
					}else
					{
						if(b[i-1][j] > b[i][j-1])
							b[i][j] = b[i-1][j];
						else
							b[i][j] = b[i][j-1];
					}
				}
			}
		}
	}
	cout << b[l1][l2] << endl;
	return 0;
}