Cod sursa(job #2168087)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 14 martie 2018 09:31:25
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("carte.in");
ofstream fout("carte.out");
char cuv[1010][3010],s[3010],*p;
short n,i,j,T,k,l,nr,ant,maxx[3010],dif;
struct cel
{
    short pozf, lu;
};
cel v[5501500];
short comp(cel x,cel y)
{
    if(x.pozf<y.pozf)
        return 1;
    else
        return 0;
}
int main()
{
    fin>>T;
    for(k=1; k<=T; k++)
    {
        fin>>s;
        fin>>n;
        nr=0;
        for(i=1; i<=n; i++)
        {
            fin>>cuv[i];
            l=strlen(cuv[i]);
            p=strstr(s,cuv[i]);
            while(p!=NULL)
            {
                nr++;
                v[nr].pozf=p-s+l-1;
                v[nr].lu=l;
                p=p+1;
                p=strstr(p,cuv[i]);
            }
        }
        l=strlen(s);
        sort(v+1,v+nr+1,comp);
        ant=v[1].pozf;
        maxx[v[1].pozf]=v[1].lu;
        for(j=0; j<v[1].pozf; j++)
            maxx[j]=0;
        for(i=2; i<=nr; i++)
        {
            for(j=ant+1; j<=v[i].pozf; j++)
                maxx[j]=maxx[j-1];
            ant=v[i].pozf;
            if(v[i].pozf-v[i].lu>=0)
            {
                dif=maxx[v[i].pozf-v[i].lu]+v[i].lu;
                maxx[v[i].pozf]=max(maxx[v[i].pozf],dif);
            }
            else
                maxx[v[i].pozf]=max(maxx[v[i].pozf],v[i].lu);
        }
        fout<<l-maxx[v[nr].pozf]<<'\n';
    }
}