Ciao, non riesco a capire dove sbaglia il mio programma. Il codice condiviso di seguito totalizza 10/100, facendo giusti solo i casi d’esempio e i testcase 3 e 7.
#include <bits/stdc++.h>
using namespace std;
int n, k;
string lista[10050], memo[10050];
string out;
void init_out()
{
while(!out.empty())
out.erase(--out.end());
return;
}
void primo()
{
int max_passaggi = min(lista[0].size(), lista[1].size());
for(int i=0; i < max_passaggi; i++)
{
if(lista[0][i] != lista[1][i])
{
out += toupper(lista[0][i]);
break;
}
out += toupper(lista[0][i]);
}
if(out.size() == lista[1].size())
out+= toupper(lista[0][out.size()]);
memo[0] = out;
init_out();
return;
}
void ultimo()
{
int max_passaggi = min(lista[n-2].size(), lista[n-1].size());
for(int i=0; i < max_passaggi; i++)
{
if(lista[n-2][i] != lista[n-1][i])
{
out += toupper(lista[n-1][i]);
break;
}
out += toupper(lista[n-1][i]);
}
if(out.size() == lista[n-2].size())
out+= toupper(lista[n-1][out.size()]);
memo[n-1] = out;
init_out();
return;
}
void calcola(int index)
{
int max_passaggi = min(lista[index].size(), lista[index-1].size());
int length_before = 0;
for(int j=0; j< max_passaggi; j++)
{
if(lista[index][j] != lista[index-1][j])
{
length_before++;
break;
}
length_before++;
}
if(length_before == lista[index-1].size())
length_before++;
int length_after = 0;
max_passaggi = min(lista[index].size(), lista[index+1].size());
for(int j=0; j< max_passaggi; j++)
{
if(lista[index][j] != lista[index+1][j])
{
length_after++;
break;
}
length_after++;
}
if(length_after == lista[index+1].size())
length_after++;
int att = max(length_before, length_after);
for(int i=0; i<att; i++)
out += toupper(lista[index][i]);
memo[index] = out;
init_out();
return;
}
int main(){
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
cin >> n >> k;
for(int i=0; i<n; i++)
{
cin >> lista[i];
}
primo();
for(int i=1; i<n-1; i++)
calcola(i);
ultimo();
for(int i=0; i<n; i+=k)
{
cout << memo[i] << "-" << memo[i+k-1] << endl;
}
return 0;
}
Il mio programma calcola per ogni stringa il minimo prefisso che devo prendere affinche’ la stringa I sia distinguibile univocamente dalla precedente e dalla successiva. Per la prima stringa controllo solamente quella successiva, mentre per l’ultima controllo solamente la precedente. Alla fine vado ad usare solo le stringhe che mi servono.
Grazie in anticipo