Submission #796600

# Submission time Handle Problem Language Result Execution time Memory
796600 2023-07-28T14:38:18 Z SlavicG Minerals (JOI19_minerals) C++17
0 / 100
1 ms 336 KB
#include <bits/stdc++.h>
#include "minerals.h"
using namespace std;
 
#define sz(a) (int)a.size()
mt19937 rng(69);
//b - valoarea elementului, stateul (aprins/stins)
int ans = 0, prevans = -1;
map<int, int> paired;
void rec(vector<int> a, vector<pair<int, int>> b) {
    if(b.empty() || a.empty()) return;
    if(sz(b) == 1) {
        for(auto x: a) {
            Answer(x, b[0].first);
            paired[b[0].first] = 1;
        }
        return;
    }
    int mid = sz(b) / 2;
    vector<pair<int, int>> left, right;
    for(int i = 0; i < sz(b); ++i) {
        if(i < mid) left.push_back(b[i]);
        else right.push_back(b[i]);
    }
    int change1 = 0, change2 = 0;
    for(auto& x: left) {
        if(!x.second) {
            ++change1;
        } else {
            ++change2;
        }
    }
    for(auto& x: right) {
        if(x.second) {
            ++change1;
        } else {
            ++change2;
        }
    }

    if(change1 <= change2) {
        for(auto& x: left) {
            if(!x.second) {
                prevans = Query(x.first);
                x.second = 1;
            }
        }
        for(auto& x: right) {
            if(x.second) {
                prevans = Query(x.first);
                x.second = 0;
            }
        }
        vector<int> first_half, second_half;
        for(auto x: a) {
            if(sz(first_half) >= sz(left)) {
                second_half.push_back(x);
                continue;
            }
            if(sz(second_half) >= sz(right)) {
                first_half.push_back(x);
                continue;
            }
            int ans = Query(x);
            if(ans == prevans) {
                first_half.push_back(x);
            } else {
                second_half.push_back(x);
            }
            prevans = ans;
        }
        rec(second_half, right);
        rec(first_half, left);
    } else {
        for(auto& x: left) {
            if(x.second) {
                prevans = Query(x.first);
                x.second = 0;
            }
        }
        for(auto& x: right) {
            if(!x.second) {
                prevans = Query(x.first);
                x.second = 1;
            }
        }
        vector<int> first_half, second_half;
        for(auto x: a) {
            if(sz(first_half) >= sz(right)) {
                second_half.push_back(x);
                continue;
            }
            if(sz(second_half) >= sz(left)) {
                first_half.push_back(x);
                continue;
            }
            int ans = Query(x);
            if(ans == prevans) {
                second_half.push_back(x);
            } else {
                first_half.push_back(x);
            }
            prevans = ans;
        }
        rec(second_half, right);
        rec(first_half, left);
    }
}
void Solve(int n) {
    vector<int> p1, p2;
    vector<int> bulanea(2 * n);
    iota(bulanea.begin(), bulanea.end(), 1);
    shuffle(bulanea.begin(), bulanea.end(), rng);
    for(int i: bulanea) {
        ans = Query(i);
        if(ans == prevans) {
            p2.push_back(i);
        } else {
            p1.push_back(i);
        }
        prevans = ans;
        if(sz(p1) == n) {
            for(int j = 0; j < sz(bulanea); ++j) {
                if(bulanea[j] == i) {
                    for(int f = j + 1; f < sz(bulanea); ++f) {
                        p2.push_back(bulanea[f]);
                    }
                    break;
                }
            }
            break;
        }
    }
    assert(sz(p1) == n && sz(p2) == n);
    vector<pair<int, int>> b;
    int paiu = p2.back();
    p2.pop_back();
    for(auto x: p1) b.push_back({x, 1});
    rec(p2, b);
    for(auto x: p1) {
        if(!paired[x]) {
            Answer(paiu, x);
        }
    }
}
/*
4
1 5
2 6
3 4
7 8
*/
// g++ -Wall -lm -static -DEVAL -o minerals -O2 minerals.cpp grader.cpp -std=c++17
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 336 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Wrong Answer [4]
2 Halted 0 ms 0 KB -