QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#207093 | #3269. 末日魔法少女计划 | KHIN | 36 | 8ms | 3988kb | C++17 | 4.2kb | 2023-10-08 09:18:38 | 2023-10-08 09:18:38 |
Judging History
answer
# include <bits/stdc++.h>
using namespace std;
namespace kh {
template <typename T>
constexpr T& cmin(T& a, T const& b)
{ return a = ::std::min(a, b); }
template <typename T>
constexpr T& cmax(T& a, T const& b)
{ return a = ::std::max(a, b); }
constexpr int Nn(1'900);
constexpr int Nx(2'000);
constexpr int K(15);
vector<pair<int, int>> ans;
namespace sol2 {
void slv(int const l, int const r) {
if (r - l <= 1) return;
int const m((l + r) / 2);
for (int i(l); i != m - 1; ++i) ans.emplace_back(i, m);
for (int i(r); i != m + 1; --i) ans.emplace_back(m, i);
slv(l, m - 1), slv(m + 1, r);
}
void main(int const n) { slv(0, n); }
}
namespace sol3 {
int f[Nx + 1];
int g[Nx + 1];
int h[Nx + 1];
void init(int const n) {
double rat(0);
for (int i(4), j(2), k(j - 1); i <= n; ++i) {
f[i] = i - 2;
f[i] += f[(i + 0) / 2 - 1];
f[i] += f[(i + 1) / 2 - 1];
g[i] = 1, h[i] = 0;
auto const val = [&] (int const j, int const k) {
int const q0(k / (j - 1)), q1(q0 + 1);
int const r1(k % (j - 1)), r0(j - 1 - r1);
int res(j * (j - 1) / 2);
res -= (q0 == 1 ? r0 : 0);
res += f[max(q0 - 2, 0)] * r0;
res += f[max(q1 - 2, 0)] * r1;
res += f[(i - k + 0) / 2 - 1];
res += f[(i - k + 1) / 2 - 1];
res += 2 * max(q0 - 2, 0) * r0;
res += 2 * max(q1 - 2, 0) * r1;
res += (i - k) - 2;
return res;
};
auto const chk = [&] (int const dj, int const dk) {
if (j + dj < 2) return false;
if (j + dj >= i - 0) return false;
if (k + dk >= i - 1) return false;
if (k + dk < j + dj - 1) return false;
if (val(j + dj, k + dk) >= val(j, k)) return false;
else return j += dj, k += dk, true;
};
while (true) {
bool ok(false);
for (int i(-7); i <= +7; ++i)
for (int j(-7); j <= +7; ++j)
ok = chk(i, j) || ok;
if (ok) continue;
else break;
}
if (val(j, k) < f[i])
f[i] = val(j, k), g[i] = j, h[i] = k;
// fprintf(stderr, "%i %i %i %i\n", i, f[i], g[i], h[i]);
cmax(rat, 1.0 * f[i] / i);
}
}
void slv(int const l, int const r) {
if (r - l <= 3) return;
int const gg(g[r - l]);
int const hh(h[r - l]);
if (gg == 1) {
int const m((l + r) / 2);
for (int i(l); i != m - 1; ++i) ans.emplace_back(i, m);
for (int i(r); i != m + 1; --i) ans.emplace_back(m, i);
slv(l, m - 1), slv(m + 1, r);
} else {
vector<int> p(1, l);
p.push_back(l + (r - l - hh) / 2);
for (int i(gg - 1), j(hh); i; --i)
p.push_back(p.back() + j / i), j -= j / i;
p.push_back(r);
if (r - l - hh > 3) ans.emplace_back(p.front(), *next(p.begin()));
if (r - l - hh > 2) ans.emplace_back(*prev(p.end(), 2), p.back());
for (auto i(next(p.begin())); next(i) != p.end(); advance(i, 1))
for (auto j(next(p.begin())); j != i; advance(j, 1))
if (*i - *j != 1) ans.emplace_back(*j, *i);
for (auto i(next(p.begin())); i != p.end(); advance(i, 1)) {
int const ll(*prev(i, 1)), rr(*prev(i, 0));
for (int j(ll + 1); j != rr; ++j) {
if (ll != l && j - ll > 1) ans.emplace_back(ll, j);
if (rr != r && rr - j > 1) ans.emplace_back(j, rr);
}
}
slv(p.front(), *next(p.begin()) - 1);
slv(*prev(p.end(), 2) + 1, p.back());
for (auto i(next(p.begin(), 2)); next(i) != p.end(); advance(i, 1))
slv(*prev(i) + 1, *i - 1);
}
}
void main(int const n) {
init(n), slv(0, n);
assert(int(ans.size()) == f[n]);
}
}
void main() {
int n, k;
cin >> n >> k;
switch (k) {
case 2 : sol2::main(n); break;
case 3 : sol3::main(n); break;
}
cout << ans.size() << '\n';
for (auto const [i, j] : ans)
cout << i << ' ' << j << '\n';
}
}
int main() { kh::main(); }
详细
Subtask #1:
score: 22
Accepted
Test #1:
score: 22
Accepted
time: 0ms
memory: 3748kb
input:
2000 2
output:
15974 0 1000 1 1000 2 1000 3 1000 4 1000 5 1000 6 1000 7 1000 8 1000 9 1000 10 1000 11 1000 12 1000 13 1000 14 1000 15 1000 16 1000 17 1000 18 1000 19 1000 20 1000 21 1000 22 1000 23 1000 24 1000 25 1000 26 1000 27 1000 28 1000 29 1000 30 1000 31 1000 32 1000 33 1000 34 1000 35 1000 36 1000 37 1000 ...
result:
ok
Test #2:
score: 22
Accepted
time: 2ms
memory: 3988kb
input:
1999 2
output:
15965 0 999 1 999 2 999 3 999 4 999 5 999 6 999 7 999 8 999 9 999 10 999 11 999 12 999 13 999 14 999 15 999 16 999 17 999 18 999 19 999 20 999 21 999 22 999 23 999 24 999 25 999 26 999 27 999 28 999 29 999 30 999 31 999 32 999 33 999 34 999 35 999 36 999 37 999 38 999 39 999 40 999 41 999 42 999 43 ...
result:
ok
Test #3:
score: 22
Accepted
time: 2ms
memory: 3732kb
input:
1992 2
output:
15902 0 996 1 996 2 996 3 996 4 996 5 996 6 996 7 996 8 996 9 996 10 996 11 996 12 996 13 996 14 996 15 996 16 996 17 996 18 996 19 996 20 996 21 996 22 996 23 996 24 996 25 996 26 996 27 996 28 996 29 996 30 996 31 996 32 996 33 996 34 996 35 996 36 996 37 996 38 996 39 996 40 996 41 996 42 996 43 ...
result:
ok
Test #4:
score: 22
Accepted
time: 2ms
memory: 3764kb
input:
1973 2
output:
15731 0 986 1 986 2 986 3 986 4 986 5 986 6 986 7 986 8 986 9 986 10 986 11 986 12 986 13 986 14 986 15 986 16 986 17 986 18 986 19 986 20 986 21 986 22 986 23 986 24 986 25 986 26 986 27 986 28 986 29 986 30 986 31 986 32 986 33 986 34 986 35 986 36 986 37 986 38 986 39 986 40 986 41 986 42 986 43 ...
result:
ok
Test #5:
score: 22
Accepted
time: 2ms
memory: 3752kb
input:
1936 2
output:
15398 0 968 1 968 2 968 3 968 4 968 5 968 6 968 7 968 8 968 9 968 10 968 11 968 12 968 13 968 14 968 15 968 16 968 17 968 18 968 19 968 20 968 21 968 22 968 23 968 24 968 25 968 26 968 27 968 28 968 29 968 30 968 31 968 32 968 33 968 34 968 35 968 36 968 37 968 38 968 39 968 40 968 41 968 42 968 43 ...
result:
ok
Subtask #2:
score: 14
Accepted
Test #6:
score: 14
Accepted
time: 8ms
memory: 3720kb
input:
1936 3
output:
7343 0 272 1664 1936 272 320 272 368 320 368 272 416 320 416 368 416 272 464 320 464 368 464 416 464 272 512 320 512 368 512 416 512 464 512 272 560 320 560 368 560 416 560 464 560 512 560 272 608 320 608 368 608 416 608 464 608 512 608 560 608 272 656 320 656 368 656 416 656 464 656 512 656 560 656...
result:
ok
Test #7:
score: 14
Accepted
time: 8ms
memory: 3660kb
input:
2000 3
output:
7613 0 280 1720 2000 280 328 280 376 328 376 280 424 328 424 376 424 280 472 328 472 376 472 424 472 280 520 328 520 376 520 424 520 472 520 280 568 328 568 376 568 424 568 472 568 520 568 280 616 328 616 376 616 424 616 472 616 520 616 568 616 280 664 328 664 376 664 424 664 472 664 520 664 568 664...
result:
ok
Test #8:
score: 14
Accepted
time: 8ms
memory: 3812kb
input:
1999 3
output:
7609 0 279 1719 1999 279 327 279 375 327 375 279 423 327 423 375 423 279 471 327 471 375 471 423 471 279 519 327 519 375 519 423 519 471 519 279 567 327 567 375 567 423 567 471 567 519 567 279 615 327 615 375 615 423 615 471 615 519 615 567 615 279 663 327 663 375 663 423 663 471 663 519 663 567 663...
result:
ok
Test #9:
score: 14
Accepted
time: 4ms
memory: 3732kb
input:
1992 3
output:
7579 0 276 1716 1992 276 324 276 372 324 372 276 420 324 420 372 420 276 468 324 468 372 468 420 468 276 516 324 516 372 516 420 516 468 516 276 564 324 564 372 564 420 564 468 564 516 564 276 612 324 612 372 612 420 612 468 612 516 612 564 612 276 660 324 660 372 660 420 660 468 660 516 660 564 660...
result:
ok
Test #10:
score: 14
Accepted
time: 8ms
memory: 3804kb
input:
1973 3
output:
7497 0 273 1700 1973 273 320 273 367 320 367 273 414 320 414 367 414 273 461 320 461 367 461 414 461 273 508 320 508 367 508 414 508 461 508 273 555 320 555 367 555 414 555 461 555 508 555 273 602 320 602 367 602 414 602 461 602 508 602 555 602 273 649 320 649 367 649 414 649 461 649 508 649 555 649...
result:
ok
Subtask #3:
score: 0
Wrong Answer
Test #11:
score: 0
Wrong Answer
time: 0ms
memory: 3868kb
input:
2000 4
output:
0
result:
wrong answer Integer 0 violates the range [1, 4000000]
Subtask #4:
score: 0
Wrong Answer
Test #16:
score: 0
Wrong Answer
time: 0ms
memory: 3636kb
input:
2000 5
output:
0
result:
wrong answer Integer 0 violates the range [1, 4000000]
Subtask #5:
score: 0
Wrong Answer
Test #21:
score: 0
Wrong Answer
time: 0ms
memory: 3796kb
input:
2000 6
output:
0
result:
wrong answer Integer 0 violates the range [1, 4000000]
Subtask #6:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 0ms
memory: 3572kb
input:
1999 7
output:
0
result:
wrong answer Integer 0 violates the range [1, 3996001]
Subtask #7:
score: 0
Wrong Answer
Test #31:
score: 0
Wrong Answer
time: 0ms
memory: 3636kb
input:
1995 8
output:
0
result:
wrong answer Integer 0 violates the range [1, 3980025]
Subtask #8:
score: 0
Wrong Answer
Test #36:
score: 0
Wrong Answer
time: 0ms
memory: 3644kb
input:
1997 9
output:
0
result:
wrong answer Integer 0 violates the range [1, 3988009]
Subtask #9:
score: 0
Wrong Answer
Test #41:
score: 0
Wrong Answer
time: 0ms
memory: 3572kb
input:
1995 10
output:
0
result:
wrong answer Integer 0 violates the range [1, 3980025]
Subtask #10:
score: 0
Wrong Answer
Test #46:
score: 0
Wrong Answer
time: 0ms
memory: 3636kb
input:
1993 11
output:
0
result:
wrong answer Integer 0 violates the range [1, 3972049]
Subtask #11:
score: 0
Wrong Answer
Test #51:
score: 0
Wrong Answer
time: 0ms
memory: 3664kb
input:
1999 12
output:
0
result:
wrong answer Integer 0 violates the range [1, 3996001]
Subtask #12:
score: 0
Wrong Answer
Test #56:
score: 0
Wrong Answer
time: 0ms
memory: 3668kb
input:
1981 13
output:
0
result:
wrong answer Integer 0 violates the range [1, 3924361]
Subtask #13:
score: 0
Wrong Answer
Test #61:
score: 0
Wrong Answer
time: 0ms
memory: 3792kb
input:
1979 14
output:
0
result:
wrong answer Integer 0 violates the range [1, 3916441]
Subtask #14:
score: 0
Wrong Answer
Test #66:
score: 0
Wrong Answer
time: 0ms
memory: 3572kb
input:
2000 15
output:
0
result:
wrong answer Integer 0 violates the range [1, 4000000]