Aiuto per Alien ABC (ois_alienabc)

Ciao a tutti, ho bisogno di aiuto per risolvere il problema [Alien ABC]
Mi da pochi casi sbagliati sparsi che mi fanno ricevere 43 punti, ma non mi viene in mente nulla.

#include<bits/stdc++.h>
using namespace std;

int main() {

    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    
    int T;
    cin>>T;
    for(int t=0; t<T; t++){
    	string s;
    	cin>>s;
    	string parallel = s;
		sort(parallel.begin(), parallel.end());
		int conta = 1, x = 0;
		vector <char> single;
		while(conta<4 && x<s.size()){
			if(parallel[x] == parallel[x+1])conta++;
			else conta = 1;
			x++;
		}
		if(conta == 4)cout<<-1;
		else{
			bool ans = true;
			string schermo;
			for(int i=0; i<s.size(); i++){
				if(s[i]==s[i+1] && s[i]==s[i+2]){
					schermo.push_back(s[i]);
					schermo.push_back(s[i]);
					schermo.push_back(s[i]);
					i+=2;
				}
				else if(s[i]==s[i+1]){
					schermo.push_back(s[i]);
					schermo.push_back(s[i]);
					i+=1;
				}
				else{
					if(single.size() == 0) single.push_back(s[i]);
					else{
						for(int k = 0; k<single.size() && ans; k++){
							if(s[i] == single[k]){
								ans = false;
								single.push_back(s[i]);
							} 
						}
					
					}
					if(ans) schermo.push_back(s[i]);
					else{
						cout<<-1;
						break;
					} 
					
				} 
			}
			if(ans){
				for(int i = 0; i<schermo.size(); i++){
					if(schermo[i]!=schermo[i+1]) cout<<schermo[i]<<" ";
					else if(schermo[i]==schermo[i+1] && schermo[i]==schermo[i+2]){
						cout<<schermo[i]<<" "<<schermo[i]<<schermo[i]<<" ";
						i+=2;
					} 
					else{
						cout<<schermo[i]<<schermo[i]<<" ";
						i++;	
					} 
				}
			}
		}
		cout<<endl;
	}
    
    
	   return 0;
}

Grazie mille in anticipo!

Qui stai facendo accessi fuori memoria: i+1 e i+2 escono dai limiti della stringa durante le ultime iterazioni del ciclo.

Qui la logica è sbagliata. Dubito tu voglia inserire i caratteri in single solo se single è vuota.

1 Mi Piace

la prima correzione la capisco, ma la seconda:
io prima vedo se è vuota cosi aggiungo il carattere sicuramente, sennò vedo se quel carattere che voglio inserire c’è già, se si output -1 sennò continuo e lo inserisco nel vector

Non lo stai inserendo.

1 Mi Piace

[/quote]
ok grazie, gli accessi fuori non creavano problemi, era solo la push_back
adesso da 100/100

Occhio a prendere queste cose alla leggera. Anche se sembra non avere problemi gli accessi fuori memoria sono sempre undefined behaviour e possono fare qualunque cosa.

1 Mi Piace