Fraud (OIS 2020)

Buongiorno, sottoponendo il mio programma mi da 65/100 per via di due Output non corretti nell’ultimo subtask, li sto cercando da un pò ma non riesco ad individuare quali sono i casi in cui il mio codice sbaglia, se qualcuno di voi riesce ad individuarli mi darebbe una grande mano.
Lascio qui il mio codice, se qualcuno avesse bisogno di chiarimenti mi scriva senza problemi,grazie in anticipo!

#include <bits/stdc++.h>
using namespace std;
int main(){
	int N;
	cin>>N;
	vector<int>v(N);
	unordered_map<int,int>cont;
	for(int i=0;i<N;i++){
		cin>>v[i];
		cont[v[i]]++;
	}
	set<int>s;
	for(auto i : cont){
		s.insert(i.second);
	}
	/*for(auto i : s){
		cout<<i<<" ";
	}*/
	int sol=0;
	auto it=s.begin();
	while(it!=s.end()){
		unordered_map<int,int>m;
		for(int i=0;i<N;i++){
			if(v[i]!=-1){
				m[v[i]]++;
				if(cont[v[i]]==*it){
					v[i]=-1;
				}
			}
			else{
				int mi=100005,mx=0;
				for(auto j : m){
					mi=min(mi,j.second);
					mx=max(mx,j.second);
				}
				sol=max(sol,mi*mx);
				m.clear();
			}
		}
		if(m.empty()==false){
			int mi=100005,mx=0;
			for(auto j : m){
				mi=min(mi,j.second);
				mx=max(mx,j.second);
			}
			sol=max(sol,mi*mx);
			m.clear();
		}
		//cout<<*it<<" : "<<sol<<"\n";
		it++;
	}
	cout<<sol;
}

Prova con questa sequenza:

12
1 1 1 1 4 3 4 4 5 4 4 4

La gestione delle sequenze “lunghe” di una stessa cifra non funziona sempre.
Infine usi variabili int ma se hai una sequenza di 100000 numeri identici?
Comunque ti ringrazio ero anch’io fermo a 65 ma analizzando il tuo …
P.S. vanno bene anche le variabili int

Di nulla sono contento di dare una mano (anche involontariamente xD), ma ora non so come modificare il codic per gestire questo caso, non ci avevo proprio pensato

Basta una piccola aggiunta: una scansione su v[i] per cercare maxlung: la sequenza più lunga di numeri identici e impostare come valore iniziale di sol= maxlung*maxlung

1 Mi Piace

Sono riuscito ad evitare la aggiunta iniziale che avevo suggerito, ho modificato il tuo codice aggiungendo poche righe fra:
m[v[i]+++;
e if(v[i]!=-1)…
è lì che si formano (anche) le sequenze critiche.
Se vuoi te le mando.

Ah grazie mille allora, si se me lo puoi mandare mi piacerebbe analizzarlo