# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
39650 | smu201111192 | Languages (IOI10_languages) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdlib.h>
#include <stdio.h>
#include <set>
#include <vector>
#include <map>
using namespace std;
#include "grader.h"
#include "lang.h"
const int MAXN = 56;
#define SZ 100
#define N 100
set<vector<int> > mp[MAXN];
long long f[5] = {0,-100,-100000,-10000000,-1000000000};
long long penalty(int *E,int idx,int cnt){
if(mp[idx].size() == 0)return 1e18;
//1개씩 ,2개씩 , 3개씩, 4개씩
long long sum = 0;
for(int i=0;i<SZ;i++){
vector<int> temp;
for(int j=0;j<cnt;j++){
if(i+j >= SZ) break;
temp.push_back(E[i+j]);
}
if(mp[idx].find(temp) != mp[idx].end()){
sum += f[cnt];
}
}
return sum;
}
void add(int *E,int idx,int cnt){
for(int i=0;i<SZ;i++){
vector<int> temp;
for(int j=0;j<cnt;j++){
if(i+j >= SZ) break;
temp.push_back(E[i+j]);
}
mp[idx].insert(temp);
}
}
void excerpt(int *E) {
vector<pair<long long,long long> > vc;
for(int i=0;i<MAXN;i++){
long long p = 0;
for(int k = 1;k<=2;k++){
p += penalty(E,i,k);
}
vc.push_back(make_pair(p,i));
}
sort(vc.begin(),vc.end());
long long go = vc[0].second;
int ans = language(go);
for(int k=1;k<=2;k++){
add(E,ans,k);
}
}