Cod sursa(job #1804787)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 12 noiembrie 2016 23:23:32
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<bits/stdc++.h>
#define Xp 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
int l,n,dr,m,p,i,j,k,rez,D[2][1<<9][1<<9];
char s[1<<9],S[1<<9];
void ad(int &a,int b)
{
    a+=b;
    if(a>=Xp) a-=Xp;
}
int main ()
{
    f>>(s+1)>>(S+1);
    n=strlen(s+1);
    m=strlen(S+1);
    l=n+m;
    D[0][0][0]=1;
    for(i=0;i<=n;++i,p^=1)
        for(j=0;i+j<=n;++j)
            for(k=0;k<=m;++k)
            {
                dr=i+k-j;
                if(dr<0||dr+k>m) continue;
                int x=D[p][j][k];
                if(i+j+k+dr==l||i+j+k+dr==l-1)
                {
                    ad(rez,x);
                    continue;
                }
                if(s[i+1]==s[n-j]) ad(D[p^1][j+1][k],x);
                if(m-dr>=1&&s[i+1]==S[m-dr]) ad(D[p^1][j][k],x);
                if(S[k+1]==s[n-j]) ad(D[p][j+1][k+1],x);
                if(m-dr>=1&&S[k+1]==S[m-dr]) ad(D[p][j][k+1],x);
                D[p][j][k]=0;
            }
    g<<rez;
    return 0;
}