이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "encoder.h"
#include "encoderlib.h"
#include<bits/stdc++.h>
using namespace std;
void encode(int N, int M[]) {
int cntone=0,cntzero=0;
for(int i = 0;i<N;i++) {
for(int j = 0;j<8;j++) {
if(M[i]&(1ll<<j))cntone++;
else cntzero++;
}
}
if(cntone+3 <= cntzero) {
for(int i = 0;i<N;i++) {
for(int j = 0;j<8;j++) {
if(M[i]&(1ll<<j)) {
if(i < 32) {
long long num = i*(1ll<<3)+j;
send(num);
}
else {
long long i_=i-32;
long long num = i_*(1ll<<3)+j;
send(num);
send(num);
}
}
}
}
}
else {
send(0);
send(0);
send(0);
send(0);
for(int i = 0;i<N;i++) {
for(int j = 0;j<8;j++) {
if(!(M[i]&(1ll<<j))) {
if(i < 32) {
long long num = i*(1ll<<3)+j;
send(num);
}
else {
long long i_=i-32;
long long num = i_*(1ll<<3)+j;
send(num);
send(num);
}
}
}
}
}
}
#include "decoder.h"
#include "decoderlib.h"
#include<bits/stdc++.h>
using namespace std;
void decode(int N, int L, int X[])
{
int ans[N];
for(int i = 0;i<N;i++)ans[i]=0;
map<int,int> cnt;
for(int i = 0;i<L;i++)cnt[X[i]]++;
bool check=(cnt[0]>3);
if(cnt[0]>3)cnt[0]-=4;
// cout << check << endl;
for(int i = 0;i<L;i++) {
if(cnt[X[i]]==0)continue;
if(cnt[X[i]]==1) {
ans[X[i]/8]|=(1ll<<(X[i]%8));
}
else if(cnt[X[i]]==2) {
ans[X[i]/8+32]|=(1ll<<(X[i]%8));
}
else if(cnt[X[i]]==3){
ans[X[i]/8+32]|=(1ll<<(X[i]%8));
ans[X[i]/8]|=(1ll<<(X[i]%8));
}
}
for(int i = 0;i<N;i++){
long long k = 0;
if(check) {
for(int j =0;j<8;j++) {
k|=(1ll<<j);
if(ans[i]&(1ll<<j))k-=(1ll<<j);
}
}
else k = ans[i];
output(k);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |