Algorytm KMR – co jest nie tak z kodem?

0

Czy może ktoś wyjaśnić co tu jest nie tak (słownik podsłów bazowych KMR?)

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <utility>
using namespace std;
pair<int,pair<int,int> >p[1000000];
string tab;
int KMR[50000][20];
int logarytm=1,ile=0;
int main(){
    int n;
    cin>>n;
    cin>>tab;
    tab[n]='~';
    while(n>logarytm){
        logarytm*=2;
        ile++;
    }
    for(int i=0;i<n;++i){
        KMR[i][0]=tab[i]-'a';
    }
    int pot=1;
    int wyn=0;
    for(int l=1;l<=ile;++l){
        for(int i=0;i<n;++i){
            if(i+pot>n){
                p[i]=make_pair(KMR[i][l-1],make_pair(-1,i));
            }
            else {
                p[i]=make_pair(KMR[i][l-1],make_pair(KMR[i+pot][l-1],i));
            }
        }
        sort(p,p+n);
        pair<int,int>pom=make_pair(-1,-1);
        for(int i=0;i<n;++i){
            if(pom!=make_pair(p[i].first,p[i].second.first)){
                pom=make_pair(p[i].first,p[i].second.first);
                wyn++;
            }
            KMR[p[i].second.second][l]=wyn;
        }
        pot<<=2;
    }
    for(int i=0;i<n;++i){
        printf("%d ",KMR[i][1]);
    }
    return 0;
}
0

Pewnie ktoś szybciej odpowie jak napiszesz jakiego efektu się spodziewasz i jaki otrzymujesz

1

Co tu jest nie tak:

  • Nazewnictwo zmiennych
  • Mieszanie języków, zarówno programowania jak i naturalnych
  • Formatowanie kodu
  • Te linijki:
pair<int,pair<int,int> >p[1000000];
int KMR[50000][20];
  • Brak opisu problemu, zastosowanego podejścia, brak komentarzy.

Zamieść i zmień co trzeba. Ktoś chętnie Ci pomoże, ale musisz mu to umożliwić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1