#include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) #define REP(i, n) for(int i = 0; i < n; i++) using namespace std; struct Letra { char letra; char veces; }; struct SAString { char *s; int *letras; Letra *letrasTiene; int tam; int dp; SAString() { s = new char[1010]; letras = new int[26]; letrasTiene = new Letra[26]; } void llenarLetras() { for(int i = 0; i < 26; i++) { letras[i] = 0; letrasTiene[i].veces = 0; } for(int i = 0; i < tam; i++) { letras[s[i] - 'a']++; } int cuenta = 0; for(int i = 0; i < 26; i++) { if(letras[i] > 0) { letrasTiene[cuenta].letra = i; letrasTiene[cuenta++].veces = letras[i]; } } s[tam] = '$'; s[++tam] = '