답안 #813112

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
813112 2023-08-07T13:38:11 Z Theo830 Flight to the Ford (BOI22_communication) C++17
0 / 100
400 ms 200 KB
#include"communication.h"
#include <bits/stdc++.h>
using namespace std;
const int bits = 30;
vector<vector<pair<int,int> > >adj;
vector<int>arr;
void encode(int n, int x){
    vector<int>arr;
    set<int>pos;
    for(int j = 0;j < bits;j++){
        pos.insert(j);
        if(x & (1<<j)){
            arr.push_back(1);
        }
        else{
            arr.push_back(0);
        }
    }
    while(pos.size() > 1){
        auto it = pos.begin();
        auto it2 = pos.begin();
        it2++;
        int i = (*it),j = (*it2);
        int a = send(arr[i]);
        int b = send(arr[j]);
        int c = send(arr[j]);
        int d = send(arr[i]);
        if(b == c){
            pos.erase(j);
        }
        else{
            pos.erase(i);
        }
    }
}
void dfs(int idx,int cur){
    arr[idx] = cur;
    for(auto x:adj[idx]){
        dfs(x.first,cur ^ x.second);
    }
}
pair<int, int> decode(int n){
    int A = 0,B = 0;
    adj.assign(bits+5,vector<pair<int,int> >());
    set<int>pos;
    for(int j = 0;j < bits;j++){
        pos.insert(j);
    }
    arr.assign(bits,-1);
    while(pos.size() > 1){
        auto it = pos.begin();
        auto it2 = pos.begin();
        it2++;
        int i = (*it),j = (*it2);
        int a = receive();
        int b = receive();
        int c = receive();
        int d = receive();
        if(b == c){
            arr[j] = b;
            pos.erase(j);
        }
        else if(a == d){
            arr[i] = a;
            pos.erase(i);
        }
        else{
            adj[j].push_back({i,a ^ c});
            pos.erase(i);
        }
    }
    auto it = pos.begin();
    int i = (*it);
    dfs(i,0);
    for(int j = 0;j < bits;j++){
        assert(arr[j] != -1);
        if(arr[j]){
            A += (1<<j);
        }
    }
    dfs(i,1);
    for(int j = 0;j < bits;j++){
        if(arr[j]){
            B += (1<<j);
        }
    }
    A = max(1,A);
    B = max(1,B);
    B = min(n,B);
    A = min(n,A);
    return {A,B};
}

Compilation message

communication.cpp: In function 'void encode(int, int)':
communication.cpp:24:13: warning: unused variable 'a' [-Wunused-variable]
   24 |         int a = send(arr[i]);
      |             ^
communication.cpp:27:13: warning: unused variable 'd' [-Wunused-variable]
   27 |         int d = send(arr[i]);
      |             ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 43 ms 200 KB Security violation!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 400 ms 200 KB Security violation!
2 Halted 0 ms 0 KB -