Cod sursa(job #1240785)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 12 octombrie 2014 00:53:46
Problema Iv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <cstring>
#define mod 3210121

using namespace std;

ifstream fin ("iv.in");
ofstream fout ("iv.out");

int d[505][505],d2[505][505],l,i,j,sol,n,m,ii,jj;

char a[505],b[505];

int main () {

    fin>>a+1;
    fin>>b+1;
    n=strlen(a+1);m=strlen(b+1);
    d[0][0]=1;
    for (l=1;l<=(n+m)/2;l++) {
        for (i=0;i<=l;i++)
            for (j=0;j<=l;j++) {
                if (i+j>n)
                    break;
                ii=l-i-1;jj=l-j-1;
                if (i+j+2<=n&&a[i+1]==a[n-j]){
                    d2[i+1][j+1]=d[i][j];
                    d2[i+1][j+1]%=mod;
                }
                if (i+j+1<=n&&ii+jj+1<=m&&a[i+1]==b[m-jj]){
                    d2[i+1][j]+=d[i][j];
                    d2[i+1][j]%=mod;
                }
                if (i+j+1<=n&&ii+jj+1<=m&&b[ii+1]==a[n-j]){
                    d2[i][j+1]+=d[i][j];
                    d2[i][j+1]%=mod;
                }
                if (ii+jj+2<=m&&b[ii+1]==b[m-jj]){
                    d2[i][j]+=d[i][j];
                    d2[i][j]%=mod;
                }
            }
        for (i=0;i<=l;i++)
            for (j=0;j<=l;j++){
                d[i][j]=d2[i][j];
                d2[i][j]=0;
            }
    }

    for (i=0;i<=n;i++)
        for (j=0;j<=n;j++)
            if (i+j<=n) {
                sol+=d[i][j];
                sol%=mod;
            }
    fout<<sol<<"\n";
    return 0;
}