Submission #1246872

#TimeUsernameProblemLanguageResultExecution timeMemory
1246872elfwingVision Program (IOI19_vision)C++20
0 / 100
3 ms932 KiB
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
using int_t = int64_t;
using int128 = __int128_t;
using ld = long double;
using pi = pair<int_t, int_t>;
using vi = vector<int_t>;
using vvi = vector<vi>;
constexpr int_t INF{numeric_limits<int_t>::max()};
int H_;
int W_;

void construct_network(int H, int W, int K)
{
    H_ = H;
    W_ = W;
    vector<int> Ns;
    vector<pi> kPos;
    int_t dem;
    vector<int> lf;
    vector<int> rg;
    int_t low = 0;
    int_t hig = H * W;
    int pic1 = -1;
    int pic2 = -1;
    int_t llow = 0;
    int_t lhig = 0;
    int_t rlow = 0;
    int_t rhig = 0;
    while (lf.empty())
    {
        vector<int> lm;
        vector<int> rm;
        if (hig - low == 2)
        {
            pic1 = low;
            pic2 = hig - 1;
            break;
        }
        for (int_t i = low; i < hig; i++)
        {
            if (i < (low + hig) / 2)
            {
                lm.push_back(i);
            }
            else
            {
                rm.push_back(i);
            }
        }
        int_t c1 = add_or(lm);
        cin >> c1;
        if (c1 == 1)
        {
            int_t c2 = add_or(rm);
            cin >> c2;
            if (c2 == 0)
            {
                hig = lm.back() + 1;
            }
            else
            {
                llow = low;
                lhig = lm.back() + 1;
                rlow = rm[0];
                rhig = hig;
                lf = lm;
                rg = rm;
            }
        }
        else
        {
            low = rm[0];
        }
    }
    while (pic1 == -1)
    {
        vector<int> lm;
        vector<int> rm;
        if (lhig - llow <= 1)
        {
            pic1 = llow;
            break;
        }
        for (int_t i = llow; i < lhig; i++)
        {
            if (i < (llow + lhig) / 2)
            {
                lm.push_back(i);
            }
            else
            {
                rm.push_back(i);
            }
        }
        int_t c1 = add_or(lm);
        cin >> c1;
        if (c1 == 1)
        {
            lhig = lm.back() + 1;
            if (lm.size() == 1)
            {
                pic1 = lm[0];
            }
        }
        else
        {
            if (lm.size() == 1)
            {
                pic1 = rm[0];
            }
            llow = rm[0];
        }
    }
    while (pic2 == -1)
    {
        vector<int> lm;
        vector<int> rm;
        if (rhig - rlow <= 1)
        {
            pic2 = rlow;
            break;
        }
        for (int_t i = rlow; i < rhig; i++)
        {
            if (i < (rlow + rhig) / 2)
            {
                lm.push_back(i);
            }
            else
            {
                rm.push_back(i);
            }
        }
        int_t c1 = add_or(lm);
        cin >> c1;
        if (c1 == 1)
        {
            rhig = lm.back() + 1;
            if (lm.size() == 1)
            {
                pic2 = lm[0];
            }
        }
        else
        {
            if (lm.size() == 1)
            {
                pic2 = rm[0];
            }
            rlow = rm[0];
        }
    }
    int_t c1, r1, c2, r2;
    c1 = pic1 / W;
    c2 = pic2 / W;
    r1 = pic1 % H;
    r2 = pic2 % H;
    if (abs(c1 - c2) + abs(r1 - r2) == K)
    {
        add_or({pic1, pic2});
    }
    else
    {
        add_not(pic1);
    }
    return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...