Cod sursa(job #30612)

Utilizator tm_raduToma Radu tm_radu Data 14 martie 2007 19:01:33
Problema Substr Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <string.h>
using namespace std;

int n, m, k;
char *p[30001], t[30001];
char pa[30001];
int pr[30001];
int pos[30001];
int lung, nr;
char *aux;
int i, j, imax;

void KMP();
void Prefix();
void Quick(int st, int dr);
int Common(char *p1, char* p2);

int main()
{
    ifstream fin("substr.in");
    ofstream fout("substr.out");
    fin >> k;
    fin.get();
    while ( (t[n] = fin.get() ) != EOF )
    {
        p[n] = &t[n];
        n++;
    }
    t[n] = '\0';
    fin.close();
    
    Quick(0, n-1);
    for ( i = 0; i < n-k; i++ )
    {
        m = Common(p[i], p[i+k]);
        if ( m > lung )
            lung = m, imax = i;
    }
    m = lung;
    fout << lung << endl;
    fout.close();
}

void Quick(int st, int dr)
{
    int i = st-1;
    int j = dr+1;
    int mij = st;
    do
    {
        do { i++; } while ( strcmp(p[i], p[mij]) < 0 );
        do { j--; } while ( strcmp(p[mij], p[j]) < 0 );
        if ( i <= j )
        {
            aux = p[i];
            p[i] = p[j];
            p[j] = aux;
        }
    } while ( i <= j );
    if ( i < dr ) Quick(i, dr);
    if ( st < j ) Quick(st, j);
}

int Common(char* p1, char* p2)
{
    int L = 0;
    for ( ; *p1 && (*p1 == *p2); L++, p1++, p2++ );
    return L;
}