Pagini recente » Cod sursa (job #2362225) | Cod sursa (job #1677914) | Cod sursa (job #2740344) | Cod sursa (job #2017923) | Cod sursa (job #1153)
Cod sursa(job #1153)
# include <fstream>
# include <string>
using namespace std;
# define input "substr.in"
# define output "substr.out"
# define max 16390
char b[max][max],s[max],aux[max];
int compara(char *p,char *q);
long n,i,j,k,nr,rez,r,m;
long divide(long p,long q)
{
long st=p,dr=q;
char x[max];
strcpy(x,b[st]);
while(st < dr)
{
while(st < dr && strcmp(b[dr],x)>=0) dr--;
strcpy(b[st],b[dr]);
while(st < dr && strcmp(b[st],x)<=0) st++;
strcpy(b[dr],b[st]);
}
strcpy(b[st],x);
return st;
}
void quick(long p,long q)
{
m = divide(p,q);
if(m-1 > p) quick(p,m-1);
if(m + 1 < q) quick(m+1,q);
}
int main()
{
ifstream fin ( input ) ;
ofstream fout ( output ) ;
fin >> n >> r;
fin.get();
fin.getline(s,max);
for(i = n-r+1;i;i--)
{
for(k = 0;k<=n-i;k++)
{
for(j = 0;j<i;j++)
b[k][j] = s[j+k];
b[k][j] = '\0';
}
quick(0,n-i);
/* for(k = 0;k<n-i;k++)
for(j = k+1;j<=n-i;j++)
if(compara(b[k],b[j]))
{
strcpy(aux,b[k]);
strcpy(b[k],b[j]);
strcpy(b[j],aux);
}*/
nr= 1;
for(k = 0;k<n-i-1;k++)
{
if(!strcmp(b[k],b[k+1]))
{
nr++;
}
else
{
if(nr > rez)
rez = nr;
nr = 1;
}
}
if(rez >= r)
{
fout << i;
return 0;
}
}
return 0;
}
int compara(char *p,char *q)
{
int n = strlen(p);
int m = strlen(q);
if(n > m)
return 1;
if(n < m)
return 0;
for(int i = 0;i<n;i++)
{
if(p[i] > q[i])
return 1;
if(p[i] < q[i])
return 0;
}
return 0;
}