今天比赛D题咋做
  • 板块学术版
  • 楼主dblark
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/7/3 18:31
  • 上次更新2023/11/4 18:52:42
查看原帖
今天比赛D题咋做
40241
dblark楼主2021/7/3 18:31

我是傻逼,赛后写了个 90pts,不知道正解是啥

乱搞做法的代码/kel 不知道和正解有没有类似

#include <iostream>
#include <vector>
#include <algorithm>

constexpr int N = 3005;

int n;
int cnt[N];
std::vector<int> pos[N];

int main() {
    std::ios::sync_with_stdio(false), std::cin.tie(nullptr);
    std::cin >> n;
    for (int i = 1; i < n; ++i) cnt[i] = n - i;
    bool fail = false;
    int now = 0;
    for (int i = n - 1; i; --i) {
        if (cnt[i] < 0) { fail = true; break; }
        while (cnt[i] >= i) {
            for (int j = 1; j <= i; ++j) pos[i].push_back(++now);
            now += i, cnt[i] -= i;
        }
        if (i & 1) {
            while (cnt[i]) {
                for (int j = i; j > 0; j -= 2) {
                    --cnt[j];
                    pos[j].push_back(++now);
                    if (cnt[j] < 0) { fail = true; break; }
                }
                if (fail) break;
                now += (i + 1) >> 1;
            }
        } else {
            while (cnt[i]) {
                for (int j = i; j > 0; j -= 2) {
                    --cnt[j];
                    pos[j].push_back(++now);
                    if (cnt[j] < 0) { fail = true; break; }
                }
                if (fail) break;
                --cnt[(i >> 1) + 1];
                pos[(i >> 1) + 1].push_back(++now);
                if (cnt[(i >> 1) + 1] < 0) { fail = true; break; }
                now += (i >> 1) + 1;
            }
        }
        if (fail) break;
    }
    if (fail) { std::cout << "-1\n"; return 0; }
    std::cout << n << '\n';
    for (int i = 0; i < n; ++i) std::cout << i << ' ';
    std::cout << '\n';
    for (int i = 1; i < n; ++i) std::reverse(pos[i].begin(), pos[i].end());
    for (int i = 1; i <= n; ++i)
        for (int j = i + 1; j <= n; ++j) {
            std::cout << i << ' ' << j << ' ' << pos[j - i].back() + 1 - i << '\n';
            pos[j - i].pop_back();
        }
    return 0;
}
2021/7/3 18:31
加载中...