Domino Massimale subtask 11 e 17

Buongiorno, ho cercato di risolvere Domino Massimale ma riesco a totalizzare un massimo di 89.47 punti. Sbaglio nei subtask 11 e 17, che sono invece gli unici a risultare corretti aggiungendo uno all’output. Immagino di non aver considerato un caso particolare che non riesco ad identificare. Di seguito il mio programma

#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

int quanti(vector<int> F,vector<int>L,int a,int b){
	
	int finish=true;
	if(a<0){
		int l=b;
		a=F[l];
		b=L[l];
			L.erase(L.begin()+l);
			F.erase(F.begin()+l);
	}

	for(int r=0;r<F.size();r++){
	
			if(a==F[r]){
				a=L[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(a==L[r]){
				a=F[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(b==F[r]){
				b=L[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(b==L[r]){
				b=F[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
	}
	if(finish){
		return 1;
	}
	return 1+quanti(F,L,a,b);
}


int main(){
	ifstream cin("input.txt");
	//ofstream cout("output.txt");
	int N;
	int x=0;
	int tmp=0;
	vector<int> A;
	vector<int> B;

	cin>>N;
	A.resize(N);
	B.resize(N);
	for(int i=0;i<N;i++){
		cin>>A[i];
		cin>>B[i];
	}
	for(int i=0;i<N;i++){
		tmp=quanti(A,B,-1,i);
		if(tmp>x){
			x=tmp;
		}
	}
	
	cout<<x<<endl;
}

Grazie in anticipo per l’aiuto

Ciao, prova con questo:
8
0 1
6 1
0 6
0 0
6 6
2 3
3 4
4 5

Grazie, l’ho adattato all’input che mi hai dato e risolve anche l’11, tuttavia non il 17

#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

int quanti(vector<int> F,vector<int>L,int a,int b){
	int x=0;
	int finish=true;
	if(a<0){
		int l=b;
		a=F[l];
		b=L[l];
			L.erase(L.begin()+l);
			F.erase(F.begin()+l);
	}
	for(int i=0;i<F.size();i++){
		if(F[i]==L[i] and (F[i]==a or F[i]==b)){
		x++;
		F.erase(F.begin()+i);
		L.erase(L.begin()+i);
		i=0;
		
		}
	}
	for(int r=0;r<F.size();r++){
	
			if(a==F[r]){
				a=L[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(a==L[r]){
				a=F[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(b==F[r]){
				b=L[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
			if(b==L[r]){
				b=F[r];
				L.erase(L.begin()+r);
				F.erase(F.begin()+r);
				finish=false;
				break;
			}
	}	
	
	if(finish){
		return 1;
	}
	return 1+quanti(F,L,a,b)+x;
}


int main(){
	ifstream cin("input.txt");
	//ofstream cout("output.txt");
	int N;
	int x=0;
	int tmp=0;
	vector<int> A;
	vector<int> B;

	cin>>N;
	A.resize(N);
	B.resize(N);
	for(int i=0;i<N;i++){
		cin>>A[i];
		cin>>B[i];
	}
	for(int i=0;i<N;i++){
		tmp=quanti(A,B,-1,i);
		if(tmp>x){
			x=tmp;
		}
	}
	
	cout<<x<<endl;
}

Ho notato che nelll’input dato se la tessera 0-0 la si mette all’inizio funziona correttamente anche la versione precedente del tuo algoritmo. Quindi, probabilmente, il tuo codice non controlla tutte le disposizioni possibili delle N tessere per cercare la sequenza più lunga. Quindi non si tratta di adattare il codice ad ogni input ma di controllare tutte le combinazioni possibili e trovare quella giusta.

Grazie, avevi ragione, ho corretto e ora va