Cod sursa(job #2008804)

Utilizator refugiatBoni Daniel Stefan refugiat Data 7 august 2017 17:17:24
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<bits/stdc++.h>
#define MOD 3210121
using namespace std;
ifstream si("iv.in");
ofstream so("iv.out");
int d[2][1<<9][1<<9];
char a[1<<9],b[1<<9];
void ad(int &x,int y)
{
    x+=y;
    if(x>=MOD)
        x-=MOD;
}
int main ()
{
    int l,n,dr,m,p=0,rez=0;
    si>>(a+1)>>(b+1);
    n=strlen(a+1);
    m=strlen(b+1);
    //cout<<1;
    l=n+m;
    d[0][0][0]=1;
    for(int i=0;i<=n;++i,p^=1)
        for(int j=0;i+j<=n;++j)
            for(int 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(a[i+1]==a[n-j])
                    ad(d[p^1][j+1][k],x);
                if(m-dr>=1&&a[i+1]==b[m-dr])
                    ad(d[p^1][j][k],x);
                if(b[k+1]==a[n-j])
                    ad(d[p][j+1][k+1],x);
                if(m-dr>=1&&b[k+1]==b[m-dr])
                    ad(d[p][j][k+1],x);
                d[p][j][k]=0;
            }
    so<<rez;
    return 0;
}