Cod sursa(job #1511230)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 26 octombrie 2015 11:01:05
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <string.h>
#define MOD 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("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()
{f>>s1+1;
f>>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;
    }
    g<<rez;
    return 0;
}