Pagini recente » Cod sursa (job #1787367) | Cod sursa (job #1610581) | Cod sursa (job #826071) | Cod sursa (job #2733969) | Cod sursa (job #2168087)
#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';
}
}