关于复杂度
查看原帖
关于复杂度
1439183
Burning_Red楼主2025/8/2 21:32

个人认为这应该就是正解了,我算的复杂度是O(Tn)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;
}

2025/8/2 21:32
加载中...