最后一个点不过,求调QAQ
查看原帖
最后一个点不过,求调QAQ
1691848
hlje233楼主2025/8/3 01:33
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

const int N = 1e5 + 10;
vector<vector<int>> ans[N];

void dfs(int n)
{
    if (n == 0 || n == 1) return;
    int temp = floor(log2(n));
    int up = (1 << (temp + 1)) - 1;
    if (up != n)
    {
        if (ans[up - n - 1].empty()) dfs(up - n - 1);
        ans[n] = ans[up - n - 1];
    }
    for (int i = n; i > up / 2; i--)
        ans[n].push_back({i, up - i});
}

int main()
{
    int t;
    cin >> t;
    ans[0].push_back({0});
    ans[1].push_back({0, 1});
    while (t--)
    {
        int n;
        cin >> n;
        dfs(n);
        cout << ans[n].size() << '\n';
        for (auto it : ans[n])
        {
            cout << it.size() << " ";
            for (auto it1 : it) cout << it1 << " ";
            cout << '\n';
        }
    }
    return 0;
}
2025/8/3 01:33
加载中...