Cod sursa(job #2652620)

Utilizator numecompletnume complet numecomplet Data 25 septembrie 2020 12:25:51
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>
#define NMAX 510
#define MOD 666013
using namespace std;
ifstream fin("subsir.in");
ofstream fout("subsir.out");
char a[NMAX],b[NMAX];
int n,m;
int nr[NMAX][NMAX];
int dp[NMAX][NMAX];
void citire();
void dp1();
int main()
{citire();
 dp1();
 fout<<nr[n][m];
    return 0;
}
void citire()
{
  fin>>(a+1)>>(b+1);
  n=strlen(a+1);
  m=strlen(b+1);
}
void dp1()
{
  int i,j;
  for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i]==b[j])
            {
             dp[i][j]=dp[i-1][j-1]+1;
             if(  !nr[i-1][j-1])
                nr[i][j]=nr[i-1][j-1]+1;
             else
              nr[i][j]=nr[i-1][j-1];
            }
            else
            if(dp[i-1][j]>dp[i][j-1])
            {
             dp[i][j]=dp[i-1][j];
             nr[i][j]=(nr[i][j]+nr[i-1][j])%MOD;
            }
            else
            if(dp[i-1][j]<dp[i][j-1])
            {
             dp[i][j]=dp[i][j-1];
             nr[i][j]=(nr[i][j]+nr[i][j-1])%MOD;
            }
            else
                if(dp[i-1][j]==dp[i][j-1])
            {
             dp[i][j]=dp[i][j-1];
             nr[i][j]=(nr[i][j-1]+nr[i-1][j]-nr[i-1][j-1]+MOD)%MOD;

            }
}