Cod sursa(job #30627)

Utilizator varuvasiTofan Vasile varuvasi Data 14 martie 2007 19:24:46
Problema Substr Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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;
}