#include <bits/stdc++.h>
#include"communication.h"
using namespace std;
#pragma GCC optimize("Ofast")
#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()
vi nums={0b0000,0b0110,0b1001,0b1111};
set<int> valid={0b0000,0b0001,0b0010,0b0100,0b0101,0b1000,0b1001,0b1010};
pi get(int a) {
pi ret={-1,-1};
for (int i=0; i<4; i++) {
if (valid.count(a^nums[i])) {
if (ret.fi==-1) {
ret.fi=i;
}
else {
ret.se=i;
}
}
}
return ret;
}
int s(int a) {
int ret=0;
for (int i=0; i<4; i++) {
ret=(ret<<1)+send((nums[a]&(1<<i))>0);
}
return ret;
}
int rec() {
int ret=0;
for (int i=0; i<4; i++) {
ret=(ret<<1)+receive();
}
return ret;
}
void encode(int n, int x) {
int lst=x&1;
for (int i=1; i<=30; i++) {
int sen=lst+2*((x&(1<<i))>0);
int temp=s(sen);
pi t=get(temp);
lst=(t.se==sen);
}
}
pi decode(int n) {
vi a={0,1};
for (int i=1; i<=30; i++) {
int temp=rec();
pi t=get(temp);
vi ta={0,0};
ta[0]=a[t.fi&1];
if (t.fi&2) {
ta[0]|=(1<<i);
}
ta[1]=a[t.se&1];
if (t.se&2) {
ta[1]|=(1<<i);
}
swap(a,ta);
}
return {max(1,min(n,a[0])),max(1,min(n,a[1]))};
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |