Submission #1217972

#TimeUsernameProblemLanguageResultExecution timeMemory
1217972qwushaLongest Trip (IOI23_longesttrip)C++20
0 / 100
1 ms420 KiB
#include <bits/stdc++.h>
#include "longesttrip.h"
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
ll inf = 1e18;


vector<int> s;
vector<int> used;
int n;
int endik = -1;

/*
bool are_connected(vector<int> a, vector<int> b) {
    cout <<endl << "QUERY" << endl;
    for (auto el : a) {
        cout << el << " ";
    }
    cout << endl << "and" << endl;
    for (auto el : b) {
        cout << el << " ";
    }
    cout << endl;

    int x;
    cin >> x;
    return (x == 1);
}
*/


vector<int> longest_trip(int N, int d) {
    n = N;
    vector<int> p, q;
    p.push_back(0);
    for (int i = 1; i < n; i++) {
        if (are_connected({0}, {i})) {
            p.push_back(i);
        } else {
            q.push_back(i);
        }
    }
    if (are_connected(p, q)) {
        int m = q.size();
        int l = -1, r = m-1;
        vector<int> pa;
        while (r - l > 1) {
            int mid = (l + r) / 2;
            pa.clear();
            for (int i = 0; i <= mid; i++) {
                pa.push_back(q[i]);
            }
            if (are_connected(p, pa)) {
                r = mid;
            } else {
                l = mid;
            }
        }
        int conq = q[r];
        m = p.size();
        l = -1;
        r = m - 1;
        while (r - l > 1) {
            int mid = (l + r) / 2;
            pa.clear();
            for (int i = 0; i <= mid; i++) {
                pa.push_back(p[i]);
            }
            if (are_connected(pa, {conq})) {
                r = mid;
            } else {
                l = mid;
            }
        }
        int conp = p[r];
        vector<int> res;
        for (auto el : q) {
            if (el != conq) {
                res.push_back(el);
            }
        }
        res.push_back(conq);
        res.push_back(conp);
        for (auto el : p) {
            if (el != conp) {
                res.push_back(el);
            }
        }
        return res;
    } else {
        if (p.size() < q.size()) {
            swap(p, q);
        }
        return p;
    }
}

/*
signed main() {
    int N, D;
    cin >> N >> D;
    auto res = longest_trip(N, D);
    for (auto el : res) {
        cout << el << ' ';
    }
    cout << endl;
}
*/
#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...