Cod sursa(job #2320574)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 14 ianuarie 2019 22:10:39
Problema Subsir Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

const int mod=1e9+7;

ifstream f("subsir.in");
ofstream g("subsir.out");

int n,m,i,j;
pair<int,int> dyn[510][510];
string s1,s2;

int main()
{
    f>>s1>>s2;
    n=s1.size();m=s2.size();
    for(i=0;i<=n;i++)
        dyn[i][0]={0,1};
    for(j=1;j<=m;j++)
        dyn[0][j]={0,1};
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(s1[i-1]==s2[j-1])
            {
                dyn[i][j]=dyn[i-1][j-1];
                dyn[i][j].first++;
            }
            else
                if(dyn[i-1][j].first>dyn[i][j-1].first)
                    dyn[i][j]=dyn[i-1][j];
                else
                    if(dyn[i-1][j].first<dyn[i][j-1].first)
                        dyn[i][j]=dyn[i][j-1];
                    else
                    {
                        dyn[i][j].second=(dyn[i-1][j].second+dyn[i][j-1].second)%mod;
                        dyn[i][j].first=dyn[i-1][j].first;
                        if(dyn[i-1][j-1].first==dyn[i][j].first)
                            dyn[i][j].second=(dyn[i][j].second+mod-dyn[i-1][j-1].second)%mod;
                    }
//    for(i=1;i<=n;i++)
//    {
//        for(j=1;j<=m;j++)
//            g<<dyn[i][j].first<<'|'<<dyn[i][j].second<<' ';
//        g<<'\n';
//    }
    g<<dyn[n][m].second;
    return 0;
}