This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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);
	}
}
int words[200];
int word_size = 0;
void clear() {
	word_size = 0;
}
void insert_word(int key) {
	for (int i = 0; i < word_size; i++) {
		if ( words[i] == key)
			return;
	}
	words[word_size++] = key;
}
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;
		clear();
		for (int i = 0; i < 100; i++) {
			int key = E[i];
			insert_word(key);
		}
		for (int i = 0; i < 99; i++) {
			int key = E[i] * 65536 + E[i + 1];
			insert_word(key);
		}
		for (int i = 0; i < word_size; i++){
			int key = words[i];
			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 time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |