Cod sursa(job #3284261)

Utilizator CostinGageaGagea Costin CostinGagea Data 11 martie 2025 12:30:08
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <fstream>

using namespace std;

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

short int v1[501];
short int v2[501];
short int d[501][501][501];
short int rez[250001][2];

int main()
{
    char ch='a';
    int ok=0,n=0,m=0,maxi=-1,cnt=0,i,j,k;
    while(cin.get(ch))
    {
        if(ch=='\n')
            ok++;
        else
        {
            if(ok==0)
            {
                n++;
                v1[n]=ch-'a'+1;
            }
            else
            {
                m++;
                v2[m]=ch-'a'+1;
            }
        }
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            d[i][j][0]=d[i-1][j][0];
            for(int x=1;x<=d[i][j][0];x++)
                d[i][j][x]=d[i-1][j][x];

            if(d[i][j][0]<d[i][j-1][0])
            {
                d[i][j][0]=d[i][j-1][0];
                for(int x=1;x<=d[i][j][0];x++)
                    d[i][j][x]=d[i][j-1][x];
            }
            if(d[i][j][0]<d[i-1][j-1][0]+1 and v1[i]==v2[j])
            {
                d[i][j][0]=d[i-1][j-1][0]+1;
                for(int x=1;x<d[i][j][0];x++)
                    d[i][j][x]=d[i-1][j-1][x];
                d[i][j][d[i][j][0]]=v1[i];
            }
            if(d[i][j][0]>maxi)
            {
                maxi=d[i][j][0];
                k=1;
                rez[k][0]=i;
                rez[k][1]=j;
            }
            else if(d[i][j][0]==maxi)
            {
                k++;
                rez[k][0]=i;
                rez[k][1]=j;
            }
        }
    for(i=1;i<=k;i++)
    {
        if(rez[i][1]!=-1)
        {
            for(int i1=i+1;i1<=k;i1++)
            {
                int x=1;
                while(d[rez[i][0]][rez[i][1]][x]==d[rez[i1][0]][rez[i1][1]][x] and x<=maxi)
                    x++;
                if(x==maxi+1)
                    rez[i1][1]=-1;
            }
            cnt++;
        }
    }
    cout<<cnt;
    return 0;
}