# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
29117 | aybala | 앵무새 (IOI11_parrots) | C++11 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "encoder.h"
#include "encoderlib.h"
#include<bits/stdc++.h>
#define fori(a,b,c) for(a=b; a<c; a++)
#define ford(a,b,c) for(a=b; a>=c; a--)
#define mp make_pair
#define pb push_back
#define ll long long
#define pii pair<int,int>
using namespace std;
void encode(int N, int M[])
{
if(N<=32){
int i;
for(i=0; i<N; i++){
int x=2;
int y=0;
while(M[i]){
if(M[i]%x){
send(i*8+y);
M[i]-=(x/2);
}
y++;
x*=2;
}
}
}
else{
int i;
for(i=0; i<N; i++){
int x=2;
int y=0;
while(M[i]){
if(M[i]%x){
if(y%2){
if(y==7){
send(i*5+4);
}
else{
send(i*5+(y-1)/2);
send(i*5+(y-1)/2);
}
}
else{
send((i*5)+(y/2));
}
M[i]-=(x/2);
}
y++;
x*=2;
}
}
}
}
#include "decoder.h"
#include "decoderlib.h"
#include<bits/stdc++.h>
#define fori(a,b,c) for(a=b; a<c; a++)
#define ford(a,b,c) for(a=b; a>=c; a--)
#define mp make_pair
#define pb push_back
#define ll long long
#define pii pair<int,int>
using namespace std;
int us[8]={1,2,4,8,16,32,64,128};
void decode(int N, int L, int X[])
{
if(N>32){
sort(X,X+L);
int i,j,k;
j=0;
fori(i,0,N){
int cod=0;
while(j<L && X[j]<=i*5+4){
int xj=X[j];
int r=0;
while(j<L && xj==X[j]){
r++;
j++;
}
xj-=i*5;
if(r!=2){
cod+=us[xj*2];
}
if(r!=1){
cod+=us[xj*2+1];
}
if(xj==4){
cod+=us[7];
}
}
output(cod);
}
}
else{
sort(X,X+L);
int i,j,k;
j=0;
fori(i,0,N){
int cod=0;
while(j<L && X[j]<=i*8+7){
X[j]-=i*8;
cod+=us[X[j]];
j++;
}
output(cod);
}
}
}#include "decoder.h"
#include "decoderlib.h"
#include<bits/stdc++.h>
#define fori(a,b,c) for(a=b; a<c; a++)
#define ford(a,b,c) for(a=b; a>=c; a--)
#define mp make_pair
#define pb push_back
#define ll long long
#define pii pair<int,int>
using namespace std;
int us[8]={1,2,4,8,16,32,64,128};
void decode(int N, int L, int X[])
{
if(N>32){
sort(X,X+L);
int i,j,k;
j=0;
fori(i,0,N){
int cod=0;
while(j<L && X[j]<=i*5+4){
int xj=X[j];
int r=0;
while(j<L && xj==X[j]){
r++;
j++;
}
xj-=i*5;
if(r!=2){
cod+=us[xj*2];
}
if(r!=1){
cod+=us[xj*2+1];
}
if(xj==4){
cod+=us[7];
}
}
output(cod);
}
}
else{
sort(X,X+L);
int i,j,k;
j=0;
fori(i,0,N){
int cod=0;
while(j<L && X[j]<=i*8+7){
X[j]-=i*8;
cod+=us[X[j]];
j++;
}
output(cod);
}
}
}