Buongiorno, stavo cercando di risolvere il problema “Cestini” di algobadge e, nonostante il procedimento logico mi sembra corretto, il codice va in segmentation fault. Ho provato a risolvere con alcune sottigliezze ma la situazione non cambia. Qualcuno saprebbe aiutarmi? Grazie!
Ecco il mio codice:
#include <iostream>
#include <string>
#include <vector>
#define MAXM 5000001
using namespace std;
vector<vector<char>>cestini(MAXM);
void solve(int t) {
int N, M, Q;
cin >> N >> M >> Q;
string S;
cin >> S;
for(int i = 0; i<MAXM;i++){
cestini[i].clear();
}
for(int i =0; i<N; i++){
cestini[0].push_back(S[i]);
}
string risposta;
for (int i = 0; i < Q; i++) {
char type;
int a, b;
cin >> type >> a >> b;
if (type == 's') {
cestini[b].emplace_back(cestini[a].back());
cestini[a].pop_back();
} else {
risposta.push_back(cestini[a][b]);
}
}
cout << "Case #" << t << ": " << risposta << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// se preferisci leggere e scrivere da file
// ti basta decommentare le seguenti due righe:
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int T;
cin >> T;
for (int t = 1; t <= T; t++) {
solve(t);
}
return 0;
}
Sono abbastanza confuso perché ho appena preso AC con il tuo codice.
Potrebbe causare problemi è la lettura dell’input:
Il programma cerca di leggere da “input.txt” mentre il file che scarichi dal sito si chiama “cestini_input_x.txt” dove x è il numero dell’input che hai scaricato. Chiaramente basta rinominare il file.
Non sono neanche sicuro che inizializzare un vettore fuori dal main sia corretto ma compilando con g++ non ha dato problemi.
Ulteriori consigli per debuggare:
il parametro di compilazione -fsanitize=address,undefined abbinato a -g dà ulteriori informazioni riguardo alla causa e al momento nel quale si verifica l’errore, se no anche utilizzare il debugger di vscode è molto comodo.
ho sistemato un po’ il codice e ora mi compila i 10 casi abbastanza velocemente. L’unica cosa è che per questa impostazione editor.maxTokenizationLineLength vsc non mi mostra i caratteri delle risposte. Sapresti a quanto dovrei impostarla?
L’impostazione editor.maxTokenizationLineLength non dovrebbe influenzare se vscode ti fa vedere il file ma solamente se prova ad interpretarlo e fornirti suggerimenti di completamento. Per file con righe molto lunghe potrebbe andarti a capo automaticamente ma non è un problema.
Se proprio volessi cambiare quell’impostazione, dato che ci sono fino a 300’000 query ed ogni query stampa un carattere dovresti impostarla ad almento 300’000, non è una buona idea (ti esplode il pc).