Submission #259240

# Submission time Handle Problem Language Result Execution time Memory
259240 2020-08-07T12:47:33 Z doowey ICC (CEOI16_icc) C++14
100 / 100
170 ms 632 KB
#include <bits/stdc++.h>
#include "icc.h"

using namespace std;

typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair

int ask(vector<int> ta, vector<int> tb){
    int n = ta.size();
    int m = tb.size();
    int f1[n];
    int f2[m];
    for(int i = 0 ; i < n; i ++ )
        f1[i]=ta[i];
    for(int i = 0 ; i < m; i ++ )
        f2[i]=tb[i];
    return query(n, m, f1, f2);
}

const int MAXN = 105;
int par[MAXN];
int sz[MAXN];

int fin(int x){
    if(x==par[x])
        return x;
    return par[x]=fin(par[x]);
}

void unite(int a, int b){
    a=fin(a);
    b=fin(b);
    if(a==b)
        return;
    if(sz[a]>sz[b])swap(a,b);
    par[a]=b;
    sz[b]+=sz[a];
}

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void run(int N){
    for(int i = 1 ; i <= N ; i ++ )
        par[i]=i,sz[i]=1;
    int i1, i2;
    int qs = 0;
    int xi, yi;
    int sz;
    for(int i = 0 ; i < N - 1; i ++ ){
        vector<vector<int>> G(N + 1);
        for(int j = 1; j <= N; j ++ ){
            G[fin(j)].push_back(j);
        }
        vector<vector<int>> nw;
        for(int j = 1; j <= N; j ++ ){
            if(!G[j].empty())
                nw.push_back(G[j]);
        }
        sz = nw.size();
        vector<int> lis1, lis2;
        for(int lg = 8; lg >= 0 ; lg -- ){
            if((1 << lg) >= nw.size()) continue;
            vector<int> pi, qi;
            for(int j = 0 ; j < nw.size(); j ++ ){
                if((j & (1 << lg))){
                    for(auto x : nw[j]) pi.push_back(x);
                }
                else{
                    for(auto x : nw[j]) qi.push_back(x);
                }
            }
            if(pi.empty() || qi.empty()) continue;
            if(ask(pi, qi)){
                lis1 = pi;
                lis2 = qi;
                break;
            }
        }
        int l = 0, r = lis1.size() - 1;
        int mid;
        while(l < r){
            mid = (l + r ) / 2;
            vector<int> fsh;
            for(int j = 0 ; j <= mid; j ++){
                fsh.push_back(lis1[j]);
            }
            if(ask(fsh,lis2))
                r = mid;
            else
                l = mid + 1;
        }
        i1 = lis1[l];
        l = 0, r = lis2.size() - 1;
        while(l < r){
            mid = (l + r) / 2;
            vector<int> fsh;
            for(int j = 0 ; j <= mid ; j ++ ){
                fsh.push_back(lis2[j]);
            }
            if(ask(lis1,fsh)){
                r = mid;
            }
            else{
                l = mid + 1;
            }
        }
        i2 = lis2[l];
        setRoad(i1, i2);
        unite(i1,i2);
    }
}

Compilation message

icc.cpp: In function 'void run(int)':
icc.cpp:66:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if((1 << lg) >= nw.size()) continue;
                ~~~~~~~~~~^~~~~~~~~~~~
icc.cpp:68:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j = 0 ; j < nw.size(); j ++ ){
                             ~~^~~~~~~~~~~
icc.cpp:50:9: warning: unused variable 'qs' [-Wunused-variable]
     int qs = 0;
         ^~
icc.cpp:51:9: warning: unused variable 'xi' [-Wunused-variable]
     int xi, yi;
         ^~
icc.cpp:51:13: warning: unused variable 'yi' [-Wunused-variable]
     int xi, yi;
             ^~
icc.cpp:52:9: warning: variable 'sz' set but not used [-Wunused-but-set-variable]
     int sz;
         ^~
# Verdict Execution time Memory Grader output
1 Correct 11 ms 512 KB Ok! 104 queries used.
2 Correct 7 ms 512 KB Ok! 97 queries used.
# Verdict Execution time Memory Grader output
1 Correct 42 ms 512 KB Ok! 556 queries used.
2 Correct 57 ms 576 KB Ok! 636 queries used.
3 Correct 58 ms 576 KB Ok! 627 queries used.
# Verdict Execution time Memory Grader output
1 Correct 137 ms 580 KB Ok! 1315 queries used.
2 Correct 148 ms 576 KB Ok! 1579 queries used.
3 Correct 148 ms 512 KB Ok! 1526 queries used.
4 Correct 144 ms 512 KB Ok! 1496 queries used.
# Verdict Execution time Memory Grader output
1 Correct 142 ms 512 KB Ok! 1473 queries used.
2 Correct 165 ms 580 KB Ok! 1503 queries used.
3 Correct 143 ms 512 KB Ok! 1513 queries used.
4 Correct 129 ms 512 KB Ok! 1378 queries used.
# Verdict Execution time Memory Grader output
1 Correct 144 ms 512 KB Ok! 1507 queries used.
2 Correct 146 ms 580 KB Ok! 1505 queries used.
3 Correct 154 ms 620 KB Ok! 1566 queries used.
4 Correct 140 ms 512 KB Ok! 1529 queries used.
5 Correct 140 ms 580 KB Ok! 1416 queries used.
6 Correct 165 ms 632 KB Ok! 1572 queries used.
# Verdict Execution time Memory Grader output
1 Correct 170 ms 512 KB Ok! 1543 queries used.
2 Correct 146 ms 488 KB Ok! 1500 queries used.