답안 #1040594

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1040594 2024-08-01T07:43:24 Z hotboy2703 카멜레온의 사랑 (JOI20_chameleon) C++17
컴파일 오류
0 ms 0 KB
#include "chameleon.h"

#include<bits/stdc++.h>
using ll = int;
using namespace std;
#define pll pair <ll,ll>
#define fi first
#define se second
#define MP make_pair
#define sz(a) (ll((a).size()))
#define BIT(mask,i) (((mask) >> (i))&1)
#define MASK(i) (1LL << (i))
namespace {

int variable_example = 1;

}  // namespace
namespace MOMJOKES{
    const ll MAXN = 510;
    ll L[MAXN],R[MAXN];
    vector <ll> cand[MAXN];
    ll pf[MAXN];
    ll sf[MAXN];

}
void TLE(){
    ll i;
    while (i<=1e18)i++;
}
ll query(vector <ll> &tmp){
    static ll cnt = 0;
    cnt++;
    if (cnt>20000)TLE();
    return Query(tmp);
}

void Solve(int n) {
    using namespace MOMJOKES;
    vector <ll> tmp;
    if (n <= 50){
        for (ll i = 1;i <= 2*n;i ++){
            for (ll j = i + 1;j <= 2*n;j ++){
                if (query({i,j}) == 1){
                    cand[i].push_back(j);
                    cand[j].push_back(i);
                }
            }
        }
    }
    else{
        for (ll i = n+1;i<=2*n;i++){
            auto add=[&](ll x,ll y){
                cand[x].push_back(y);
                cand[y].push_back(x);
            };
            ll ans_l,ans_r,ans_mid;
            {
                ll l = 1,r = n;
                while (l <= r){
                    ll mid = (l + r) >> 1;
                    vector <ll> tmp;
                    for (ll j = 1;j <= mid;j ++)tmp.push_back(j);
                    tmp.push_back(i);
                    ll cur = query(tmp);
                    if (cur<=mid){r = mid - 1;}
                    else l = mid + 1;
                }
                ans_l = r + 1;
            }
            {
                ll l = 1,r = n;
                while (l <= r){
                    ll mid = (l + r) >> 1;
                    vector <ll> tmp;
                    for (ll j = mid;j <= n;j ++)tmp.push_back(j);
                    tmp.push_back(i);
                    ll cur = query(tmp);
                    if (cur<=n-mid+1){l = mid + 1;}
                    else r = mid - 1;
                }
                ans_r = l - 1;
            }
            if (ans_l != ans_r){
                ll l = ans_l + 1,r = ans_r - 1;
                while (l <= r){
                    ll mid = (l + r) >> 1;
                    vector <ll> tmp;
                    for (ll j = ans_l+1;j <= mid;j ++)tmp.push_back(j);
                    ll cur1 = query(tmp);
                    tmp.push_back(i);
                    ll cur2 = query(tmp);
                    if (cur2<=cur1){r = mid - 1;}
                    else l = mid + 1;
                }
                ans_mid = r + 1;
                add(i,ans_l);
                add(i,ans_mid);
                add(i,ans_r);
            }
            else{
                add(i,ans_l);
            }
        }
    }
    set <pll> s;
    for (ll i = 1;i <= 2 * n;i ++){
        if (sz(cand[i]) == 3){
            for (ll j = 0;j < 3;j ++){
                vector <ll> all = {i};
                for (ll j1 = 0;j1 < 3;j1 ++){
                    if (j1 != j)all.push_back(cand[i][j1]);
                }
                if (j == 2 || query(all) == 1){
                    L[i] = cand[i][j];
                    break; 
                }
            }
        }
        else{
            ll u = i,v = cand[i][0];
            if (u > v)swap(u,v);
            s.insert(MP(u,v));
        }
    }    
    for (ll i = 1;i <= 2 * n;i ++){
        if (sz(cand[i]) == 3){
            for (ll j = 0;j < 3;j ++){
                if (cand[i][j] == L[i] || L[cand[i][j]] == i)continue;
                ll u = i,v = cand[i][j];
                if (u > v)swap(u,v);
                s.insert(MP(u,v));
            }
        }
    }   
    for (auto x:s)Answer(x.fi,x.se);
}

Compilation message

chameleon.cpp: In function 'void Solve(int)':
chameleon.cpp:43:32: error: cannot bind non-const lvalue reference of type 'std::vector<int>&' to an rvalue of type 'std::vector<int>'
   43 |                 if (query({i,j}) == 1){
      |                                ^
In file included from /usr/include/c++/10/vector:67,
                 from chameleon.h:5,
                 from chameleon.cpp:1:
/usr/include/c++/10/bits/stl_vector.h:625:7: note:   after user-defined conversion: 'std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<int>]'
  625 |       vector(initializer_list<value_type> __l,
      |       ^~~~~~
chameleon.cpp:30:23: note:   initializing argument 1 of 'll query(std::vector<int>&)'
   30 | ll query(vector <ll> &tmp){
      |          ~~~~~~~~~~~~~^~~
chameleon.cpp: At global scope:
chameleon.cpp:15:5: warning: '{anonymous}::variable_example' defined but not used [-Wunused-variable]
   15 | int variable_example = 1;
      |     ^~~~~~~~~~~~~~~~