Cod sursa(job #1992464)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 20 iunie 2017 15:11:44
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb

#include <fstream>
#include <string.h>
#define MOD 3210121

using namespace std;

ifstream fin("iv.in");
ofstream fout("iv.out");
int a[2][510][510],n1,n2,i,j,dr,k,rez,p,l;
char s1[501],s2[501];
void ad(int &a,int b)
{
    a+=b;
    a=a%MOD;
}
int main()
{
    fin>>s1+1;
    fin>>s2+1;
    n1=strlen(s1+1);
    n2=strlen(s2+1);
    l=n1+n2;
    a[0][0][0]=1;
    p=0;
    for(i=0;i<=n1;++i)
    {
        for(j=0;j<=n1-i;++j)
            for(k=0;k<=n2;++k)
            {
                dr=i+k-j;
                if(dr<0||dr+k>n2)
                    continue;
                if(i+j+k+dr==l-1||i+j+k+dr==l)
                {
                    ad(rez,a[p][j][k]);
                        continue;
                }
                if(s1[i+1]==s1[n1-j])
                        ad(a[1-p][j+1][k],a[p][j][k]);
                if(n2-dr>=1&&s1[i+1]==s2[n2-dr])
                        ad(a[1-p][j][k],a[p][j][k]);
                if(s2[k+1]==s1[n1-j])
                        ad(a[p][j+1][k+1],a[p][j][k]);
                if(n2-dr>=1&&s2[k+1]==s2[n2-dr])
                        ad(a[p][j][k+1],a[p][j][k]);
                a[p][j][k]=0;
            }
        p=1-p;
    }
   fout<<rez;
    return 0;
}