Pagini recente » Cod sursa (job #1604635) | Cod sursa (job #746173) | Cod sursa (job #1400708) | Cod sursa (job #3130054) | Cod sursa (job #30627)
Cod sursa(job #30627)
#include <stdio.h>
#include <string.h>
#define MaxN 17000
int N, K;
char s[MaxN];
int maxlen;
char *ps[MaxN];
void Sort(int st, int dr)
{
char *pivot = ps[(st+dr)/2];
int i = st, j = dr;
do
{
while ( strcmp(ps[i], pivot) < 0 ) i++;
while ( strcmp(ps[j], pivot) > 0 ) j--;
if ( i <= j )
{
char *aux = ps[i];
ps[i] = ps[j];
ps[j] = aux;
i++; j--;
}
} while ( i <= j );
if ( st < j ) Sort(st, j);
if ( i < dr ) Sort(i, dr);
}
int pref(char *a, char *b)
{
int L = 0;
for (; *a && (*a++ == *b++); L++);
return L;
}
int main()
{
int i, j;
FILE *fin = fopen("substr.in", "rt");
FILE *fout = fopen("substr.out", "wt");
fscanf(fin, "%d %d\n%s", &N, &K, &s);
for (i = 0; i < N; i++)
ps[i] = &s[i];
Sort(0, N-1);
for (i = 0; i <= N - K; i++)
{
int x = pref(ps[i], ps[i+K-1]);
if (x > maxlen) maxlen = x;
}
for (i = 0; i < N; i++)
fprintf(fout, "%s\n", ps[i]);
fprintf(fout, "%d\n", maxlen);
fclose(fin);
fclose(fout);
return 0;
}