이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |