Cod sursa(job #2286629)

Utilizator PredescuSebastianIonPredescu Sebastian Ion PredescuSebastianIon Data 20 noiembrie 2018 16:30:36
Problema Iv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>
#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 a[2][510][510],l,n,dr,m,p,i,j,k,rez;
char s1[510],s2[510];
int main ()
{
    f>>(s1+1);
    f>>(s2+1);
    n=strlen(s1+1);
    m=strlen(s2+1);
    l=n+m;
    a[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,a[p][j][k]);
                    continue;
                }
                if(s1[i+1]==s1[n-j])
                {
                    ad(a[1-p][j+1][k],a[p][j][k]);
                }
                if(m-dr>=1 && s1[i+1]==s2[m-dr])
                {
                    ad(a[1-p][j][k],a[p][j][k]);
                }
                if(s2[k+1]==s1[n-j])
                {
                    ad(a[p][j+1][k+1],a[p][j][k]);
                }
                if(m-dr>=1 && s2[k+1]==s2[m-dr])
                {
                    ad(a[p][j][k+1],a[p][j][k]);
                }
                a[p][j][k]=0;
            }
        }
        p=1-p;
    }
    g<<rez<<'\n';
    return 0;
}