Cod sursa(job #750959)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 23 mai 2012 18:53:40
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

ifstream in("iv.in");
ofstream out("iv.out");

const int N = 505;
const int M = 3210121;

char a[N], b[N];
int l1, l2, d[2][N][N], rez, L;

int main() {
	int i,j,k,l;
	
	in.getline(a + 1, N);
	in.getline(b + 1, N);
	
	l1 = strlen(a + 1);
	l2 = strlen(b + 1);
	L = l1 + l2;
	
	d[0][0][0] = 1;
	
	for(i = 0; i<=l1; ++i) {
		
		for(j = 0; j<=l2; ++j)
			for(k = 0; k + i <= l1; ++k) {
				
				l = i + j - k;
				
				if(l + j <= l2) {
					
					if(i + j + k + l == L || i + j + k + l == L - 1)
						rez = (rez + d[0][j][k])%M;
					
					if(a[i + 1] == a[l1 - k])
						d[1][j][k + 1] = (d[1][j][k + 1] + d[0][j][k])%M;
					
					if(a[i + 1] == b[l2 - l])
						d[1][j][k] = (d[1][j][k] + d[0][j][k])%M;
					
					if(b[j + 1] == a[l1 - k])
						d[0][j + 1][k + 1] = (d[0][j + 1][k + 1] + d[0][j][k])%M;
					
					if(b[j + 1] == b[l2 - l])
						d[0][j + 1][k] = (d[0][j + 1][k] + d[0][j][k])%M;
				}
			}
		
		for(j = 0; j<=l2; ++j)
			for(k = 0; k<=l1; ++k)
				d[0][j][k] = d[1][j][k], d[1][j][k] = 0;
	}
	
	out << rez << "\n";
	
	return 0;
}