个人认为这应该就是正解了,我算的复杂度是O(Tn),对吗???
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 10;
vector<ll> V[N];
ll cnt;
ll siz[N];
void dfs(ll x) {
if (x == 0) {
cnt++;
siz[cnt] = 1;
V[cnt].push_back(0);
return;
}
ll t = 0;
while ((1 << t) - 1 <= x) {
t++;
}
t--;
t = (1 << t) - 1;
ll i, j;
if (t == x) {
i = 0;
j = t;
while (i < j) {
cnt++;
siz[cnt] = 2;
V[cnt].push_back(i);
V[cnt].push_back(j);
i++;
j--;
}
} else {
i = t;
j = t + 1;
while (j <= x) {
cnt++;
siz[cnt] = 2;
V[cnt].push_back(j);
V[cnt].push_back(i);
j++;
i--;
}
dfs(i);
}
}
int main() {
ll T;
cin >> T;
while (T--) {
ll n;
cin >> n;
cnt = 0;
dfs(n);
printf("%lld\n", cnt);
for (int i = 1; i <= cnt; i++) {
printf("%lld ", siz[i]);
for (int j = 0; j < siz[i]; j++) {
printf("%lld ", V[i][j]);
}
printf("\n");
V[i].clear();
siz[i] = 0;
}
}
return 0;
}