Cod sursa(job #2253158)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 3 octombrie 2018 18:29:41
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<vector>
#include<fstream>
#define mod 3210121

using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
char s1[501],s2[501];
int n1,n2,n,i,j,k,h,sol,a[2][501][501];

int main()
{
    fin>>s1+1;
    for(i=1;s1[i]!=0;i++);
    n1=i-1;
    fin>>s2+1;
    for(i=1;s2[i]!=0;i++);
    n2=i-1;
    n=n1+n2;
    a[0][0][0]=1;
    for(i=0;i<=n1;i++)
    {   for(j=0;j<=n2;j++)
            for(k=0;k+i<=n1;k++)
                if(j+i+j-k<=n2)
                {   h=i+j-k;
                    if(i+j+k+h==n||i+j+k+h==n-1)
                        sol=(sol+a[0][j][k])%mod;
                    if(s1[i+1]==s1[n1-k])
                        a[1][j][k+1]=(a[1][j][k+1]+a[0][j][k])%mod;
                    if(s1[i+1]==s2[n2-h])
                        a[1][j][k]=(a[1][j][k]+a[0][j][k])%mod;
                    if(s2[j+1]==s1[n1-k])
                        a[0][j+1][k+1]=(a[0][j+1][k+1]+a[0][j][k])%mod;
                    if(s2[j+1]==s2[n2-h])
                        a[0][j+1][k]=(a[0][j+1][k]+a[0][j][k])%mod;
                }
        for(j=0;j<=n2;j++)
            for(k=0;k<=n1;k++)
                a[0][j][k]=a[1][j][k],a[1][j][k]=0;
    }
    fout<<sol;
    fin.close();
    fout.close();
    return 0;
}