Cod sursa(job #2182627)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 22 martie 2018 15:46:47
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>

using namespace std;

ifstream cin("subsir.in");
ofstream cout("subsir.out");

string s1, s2;

int d[505][505], nr[505][505];

int main()
{
    cin >> s1 >> s2;
    nr[0][0] = 1;
    for (int i = 0; i < 502; ++i) {
        nr[i][0] = nr[0][i] = 1;
    }
    for (int i = 0; i < s1.size(); ++i) {
        for (int j = 0; j < s2.size(); ++j) {
            if (s1[i] == s2[i]) {
                d[i + 1][j + 1] = d[i][j] + 1;
                nr[i + 1][j + 1] = nr[i][j];
            }
            else {
                if (d[i][j + 1] == d[i + 1][j]) {
                    d[i + 1][j + 1] = d[i + 1][j];
                    nr[i + 1][j + 1] = nr[i + 1][j] + nr[i][j + 1] - nr[i][j];
                }
                else if (d[i][j + 1] < d[i + 1][j]) {
                    d[i + 1][j + 1] = d[i][j + 1];
                    nr[i + 1][j + 1] = nr[i][j + 1];
                }
                else {
                    d[i + 1][j + 1] = d[i + 1][j];
                    nr[i + 1][j + 1] = nr[i + 1][j];
                }
            }
        }
    }
    cout << nr[s1.size()][s2.size()];
    return 0;
}