Cod sursa(job #2596368)

Utilizator alex_benescuAlex Ben alex_benescu Data 9 aprilie 2020 17:27:06
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#define N 510
#include<cstring>
#define mod 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
void ad(int &a,int b){
	a+=b;
	if(a>=mod)
		a-=mod;
}
int D[2][N][N],l,n,dr,m,p,i,j,k,rez;
char s1[N],s2[N];
int main(){
	f>>(s1+1);
	f>>(s2+1);
	n=strlen(s1+1);
	m=strlen(s2+1);
	l=n+m;
	D[0][0][0]=1;
	p=0;
	for(i=0;i<=n;++i){
		for(j=0;i+j<=n;++j)
			for(k=0;k<=m;++k){
				dr=i+k-j;
				if(dr<0||dr+k>m)
					continue;
				if(i+j+k+dr==l||i+j+k+dr==l-1){
					ad(rez,D[p][j][k]);
					continue;
				}
				if(s1[i+1]==s1[n-j])
					ad(D[1-p][j+1][k],D[p][j][k]);
				if(m-dr>=1&&s1[i+1]==s2[m-dr])
					ad(D[1-p][j][k],D[p][j][k]);
				if(s2[k+1]==s1[n-j])
					ad(D[p][j+1][k+1],D[p][j][k]);
				if(m-dr>=1&&s2[k+1]==s2[m-dr])
					ad(D[p][j][k+1],D[p][j][k]);
				D[p][j][k]=0;
			}
		p=1-p;
	}
	g<<rez;
	return 0;
}