# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
125581 | thebes | 앵무새 (IOI11_parrots) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
map<vector<int>,int> mp;
map<int,vector<int>> rev;
vector<int> vec; int nxt;
void rec(int n){
if(n==3){
if(vec.size()!=5) return;
mp[vec]=nxt++;
rev[nxt-1]=vec;
}
else{
rec(n+1);
for(int i=1;i<=5;i++){
vec.push_back(n);
rec(n+1);
}
for(int i=0;i<5;i++)
vec.pop_back();
}
}
void encode(int N,int *M){
mp.clear(); rev.clear(); nxt = 0;
rec(0);
for(int i=0;i<N;i++){
int s = (M[i]&15);
int f = ((M[i]^s)>>4);
vector<int> w = rev[f];
for(auto v : w){
if(v==0) send(i*4);
else if(v==1) send(i*4+1);
}
w = rev[s];
for(auto v : w){
if(v==0) send(i*4+2);
else if(v==1) send(i*4+3);
}
}
}
#include <bits/stdc++.h>
using namespace std;
map<vector<int>,int> mp;
map<int,vector<int>> rev;
vector<int> vec; int nxt;
void rec(int n){
if(n==3){
if(vec.size()!=5) return;
mp[vec]=nxt++;
rev[nxt-1]=vec;
}
else{
rec(n+1);
for(int i=1;i<=5;i++){
vec.push_back(n);
rec(n+1);
}
for(int i=0;i<5;i++)
vec.pop_back();
}
}
vector<int> heh[200];
void decode(int N,int L,int *X){
mp.clear(); rev.clear(); nxt = 0;
rec(0);
for(int i=0;i<200;i++) heh[i].clear();
for(int i=0;i<L;i++){
int pog = (X[i]>>1);
heh[pog].push_back((X[i]&1));
}
for(int i=0;i<2*N;i++){
while(heh[i].size()<5)
heh[i].push_back(2);
sort(heh[i].begin(),heh[i].end());
}
for(int i=0;i<N;i++){
int f = mp[heh[2*i]];
int s = mp[heh[2*i+1]];
output((f<<4)+s);
}
}