Submission #18713

#TimeUsernameProblemLanguageResultExecution timeMemory
18713suhgyuho_williamJOIOJI (JOI14_joioji)C++98
100 / 100
46 ms6952 KiB
#include <stdio.h>
#include <map>

using namespace std;

int N,ans;
char a[200010];
struct data{
	int j,o,i;
	bool operator < (const data x) const{
		if(j != x.j) return j < x.j;
		if(o != x.o) return o < x.o;
		return i < x.i;
	}
	data(int ij,int io,int ii){
		j = ij;
		o = io;
		i = ii;
	}
};
map<data,int> Map;

int main(){
	int i,tmp;
	int cj,co,ci;
	cj = co = ci = 0;
	//freopen("input.txt","r",stdin);

	scanf("%d\n",&N);
	gets(a);
	Map[data(0,0,0)] = 0;
	for(i=1; i<=N; i++){
		if(a[i-1] == 'J'){
			cj++;
		}else if(a[i-1] == 'O'){
			co++;
		}else{
			ci++;
		}
		if(Map.find(data(cj-co,co-ci,ci-cj)) != Map.end()){
            tmp = Map[data(cj-co,co-ci,ci-cj)];
            if(ans < i-tmp) ans = i-tmp;
		}else{
			Map[data(cj-co,co-ci,ci-cj)] = i;
		}
	}
	printf("%d\n",ans);

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...