제출 #1182244

#제출 시각아이디문제언어결과실행 시간메모리
1182244kl0989eFlight to the Ford (BOI22_communication)C++20
70 / 100
1212 ms3252 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...