Cod sursa(job #2605532)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 25 aprilie 2020 13:14:26
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("subsir.in");
ofstream fout("subsir.out");

const int DIM = 507;
const int mod = 666013;

string a, b;

int dp[DIM][DIM];
int nr[DIM][DIM];


main()
{
	string a;
	string b;
	
	fin >> a >> b;
	
	int n = a.size();
	int m = b.size();
	
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
		{
			char x = a[i - 1];
			char y = b[j - 1];
			
			if(x == y)
			{
				dp[i][j] = dp[i - 1][j - 1] + 1;
				nr[i][j] = max(nr[i - 1][j - 1], 1);
			}
			else
			{
				dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
				
				if(dp[i][j] == dp[i - 1][j])
					nr[i][j] += nr[i - 1][j];
				
				if(dp[i][j] == dp[i][j - 1])
					nr[i][j] += nr[i][j - 1];
				
				if(dp[i - 1][j] == dp[i][j - 1])
					nr[i][j] -= nr[i - 1][j - 1];
				
				nr[i][j] %= mod;
				
				if(nr[i][j] < 0)
					nr[i][j] += mod;
			}
		}
	
	fout << nr[n][m] << '\n';
}