Enciclopedia olimpica (enciclopedia)

Ho fatto 10/100, con il caso 3, 7, 10 corretti e il resto sbagliati, non capisco dove sbaglio.

#include<bits/stdc++.h>
#define MAXN 10001

using namespace std;

int N, K;

string vet[MAXN];

string uppercase(string str)
{
	for(int i=0; i<str.length();i++)
		if(str[i]>='a'&&str[i]<='z')str[i]-=32;
	return str;
}

int ric(int i, int j){
	if(i>N){
		return 0;
	}
	if(i%K==0){
		if(vet[i-1].substr(0, j)!=vet[i].substr(0, j)){
			cout<<"-"<<uppercase(vet[i-1].substr(0, j))<<"\n";
			for(int z=1; z<=vet[i-1].length(); z++){
				if(vet[i-1].substr(0, z)!=vet[i].substr(0, z)){
					return ric(i+(K-1), z);
				}
			}
		}else{
			for(int z=j+1; z<=vet[i-1].length(); z++){
				if(vet[i-1].substr(0, z)!=vet[i].substr(0, z)){
					cout<<"-"<<uppercase(vet[i-1].substr(0, z))<<"\n";
					return ric(i+(K-1), z);
				}
			}
			cout<<"-"<<uppercase(vet[i-1])<<"\n";
			return ric(i+1, vet[i-1].length()+1);
		}
	}
	if(i==K-1 || (i-(K-1))%K==0){
		if(vet[i-(K-1)].substr(0, j)!=vet[i].substr(0, j)){
			cout<<uppercase(vet[i-(K-1)].substr(0, j));
			for(int z=1; z<=vet[i-(K-1)].length(); z++){
				if(vet[i-(K-1)].substr(0, z)!=vet[i].substr(0, z)){
					return ric(i+1, z);
				}
			}
		}else{
			for(int z=j+1; z<=vet[i-(K-1)].length(); z++){
				if(vet[i-(K-1)].substr(0, z)!=vet[i].substr(0, z)){
					cout<<uppercase(vet[i-(K-1)].substr(0, z));
					return ric(i+1, z);
				}
			}
			cout<<uppercase(vet[i-(K-1)]);
			return ric(i+1, vet[i-(K-1)].length()+1);
		}
	}
}

int main(){

	#ifdef EVAL
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	
	cin>>N>>K;
	
	for(int i=0; i<N; i++){
		cin>>vet[i];
	}
	ric(K-1, 1);
}

In poche parole chiamo la funzione ricorsiva solo sulle stringhe utili, e cerco la prima sottostringa diversa tra le due stringhe.

Sto guardando ma se le pagine sono K in ogni pagina vanno inserite N/K voci non K.
Forse i test corretti sono quelli per cui K=N/K.
Con questa modifica, cioè ponendo K=N/K, si fa 30/100 e si sbagliano solo 3 test case: 4,12,15.
Infine c’è una svista; una chiamata a ric non è corretta, modificata quella il tuo programma fa 100/100 anche se alla fine fa un controllo su vet[i] con i che vale N.
nella ric ci sono due

la prima va corretta con i-(K-1) al posto di i+1.

Grazie! Sono riuscito a fare 100/100.