Cod sursa(job #2703368)

Utilizator stefantagaTaga Stefan stefantaga Data 8 februarie 2021 14:01:16
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");
char s[505],s1[505];
string cuv;
map <string,bool> m;
int n,n1,i,din[505][505],q,v[505],v1[505],j,ok[505][505],nr;
void adauga(int x,int y)
{
    if (x>=1&&y>=1)
    {
        if (v[x]==v1[y])
    {
        adauga(x-1,y-1);
        cuv.push_back(s1[y-1]);
    }
        else
        {
            if (din[x][y-1]>din[x-1][y])
            {
                adauga(x,y-1);
            }
            else
            {
                adauga(x-1,y);
            }
        }
    }
}
int main()
{
    f>>s;
    f>>s1;
    n=strlen(s);
    n1=strlen(s1);
    for (i=0;i<n;i++)
    {
        v[i+1]=s[i]-'a'+1;
    }
    for (i=0;i<n1;i++)
    {
        v1[i+1]=s1[i]-'a'+1;
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=n1;j++)
        {
            if (v[i]==v1[j])
                {
                    ok[i][j]=1;
                    din[i][j]=din[i-1][j-1]+1;
                }
            else
        {
            din[i][j]=max(din[i-1][j],din[i][j-1]);
        }
        }
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=n1;j++)
        {
            if (ok[i][j]==1&&din[i][j]==din[n][n1])
            {
                cuv.clear();
                adauga(i,j);
                m[cuv]=1;
            }
        }
    }
    nr=0;
    for (auto ind : m)
    {
        nr++;
    }
    g<<nr;
    return 0;
}