# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
874247 | LucaLucaM | Super Dango Maker (JOI22_dango3) | C++17 | 3345 ms | 964 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dango3.h"
#ifdef LOCAL
#include "grader.cpp"
#endif // LOCAL
#include <vector>
#include <random>
#include <algorithm>
#include <functional>
#include <cassert>
#include <iostream>
std::mt19937 rng(3192702);
void Solve(int n, int m) {
/**
sol in O(n * m^2) query uri:
pornesc cu toate valorile ramase si de fiecare data incerc sa scot cate 1
**/
std::vector<int> id(n * m + 1);
for (int i = 1; i <= n * m; i++) {
id[i] = i;
}
shuffle(id.begin() + 1, id.end(), rng);
auto query = [&] (std::vector<int> v) {
std::vector<int> w;
for (const auto &x : v) {
w.push_back(id[x]);
}
return Query(w);
};
auto answer = [&] (std::vector<int> v) {
std::vector<int> w;
for (const auto &x : v) {
w.push_back(id[x]);
}
Answer(w);
};
std::function<std::vector<int>(std::vector<int>)> exclude = [&] (std::vector<int> v) {
bool dont[n * m + 1] = {};
for (const auto &x : v) {
dont[x] = true;
}
std::vector<int> w;
for (int i = 1; i <= n * m; i++) {
if (!dont[i]) {
w.push_back(i);
}
}
return w;
};
bool taken[n * m + 1] = {};
int SZ = 50'000 / m;
for (int rep = 0; rep < m; rep++) {
std::vector<int> cand;
for (int i = 1; i <= n * m; i++) {
if (!taken[i]) {
cand.push_back(i);
}
}
shuffle(cand.begin(), cand.end(), rng);
std::vector<int> ret;
ret.push_back(cand[0]);
for (int i = 1; i < (int) cand.size() && (int) ret.size() < n; i++) {
std::vector<int> nw = ret;
nw.push_back(cand[i]);
if (query(exclude(ret)) == query(exclude(nw))) {
ret.push_back(cand[i]);
}
}
// std::cout << "! " << (int) ret.size() << '\n';
answer(ret);
for (const auto &x : ret) {
taken[x] = true;
}
}
}
/**
3 2
3 3 1 2 1 2
4 4
2 2 3 2 4 4 3 2 3 1 1 3 4 1 4 1
**/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |