제출 #67580

#제출 시각아이디문제언어결과실행 시간메모리
67580usefulhyunLanguages (IOI10_languages)C++17
82 / 100
8540 ms51324 KiB
#include <stdlib.h>
#include <stdio.h>
#include <map>
#include <unordered_map>
using namespace std;

#include "grader.h"
#include "lang.h"

#define SZ 100

unordered_map<int, int> occurrence[56];
bool initialized = false;
void init() {

	for (int lang = 0; lang < 56; lang++) {
		occurrence[lang].reserve(100000);
	}
}

void excerpt(int *E) {
	if (!initialized) {
		init();
		initialized = true;
	}



	int guess = 0;
	int max_similarity = 0;
	for (int lang = 0; lang < 56; lang++) {
		int similarity = 0;
		map<int, bool> words;

		for (int i = 0; i < 100; i++) {
			int key = E[i];
			words[key] = true;
		}

		for (int i = 0; i < 99; i++) {
			int key = E[i] * 65536 + E[i + 1];
			words[key] = true;
		}

		for (auto itr = words.begin(); itr != words.end(); itr++) {
			int key = itr->first;
			if (occurrence[lang].find(key) != occurrence[lang].end())
				similarity++;
		}
		

		if (max_similarity < similarity) {
			max_similarity = similarity;
			guess = lang;
		}
	}


	int ans = language(guess);

	for (int i = 0; i < 100; i++) {
		int key = E[i];
		occurrence[ans][key] = 1;
	}

	for (int i = 0; i < 99; i++) {
		int key = E[i] * 65536 + E[i + 1];
		occurrence[ans][key] = 1;
	}

//	printf("%d %d\n", guess, ans);

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...