求hack
查看原帖
求hack
539755
Shapy_UI_Tools楼主2023/9/5 21:14
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int T;

int n, k;
long long d;

int ans[N];
int mainpoint[N];

int main() {
	scanf("%d", &T);
	while (T--) {
		ans[0] = 0;
		scanf("%d%lld%d", &n, &d, &k);
		if (d < n - 1) {
			printf("NO\n");
			continue;
		}
		long long sum = 0;
		int cnt = 1, dep = 0;
		bool flag = true;
		while (flag) {
			int fa = cnt;
			dep++;
			mainpoint[dep] = fa;
			if (sum + 1ll * (n - cnt) * dep >= d) {
				int now = cnt + 1, tmpcnt = 0;
				for (;now <= n && sum + dep < d;now++) {
					ans[++ans[0]] = fa;
					sum += dep;
					tmpcnt++;
				}
				for (;now < n;now++) {
					ans[++ans[0]] = 1;
					sum++;
				}
				ans[++ans[0]] = mainpoint[d - sum];
				if (mainpoint[d - sum] == fa) tmpcnt++;
				if (tmpcnt < k) flag = false;
				break;
			}
			for (int i = 1;i <= k;i++) {
				cnt++;
				if (cnt > n && sum < d) {
					flag = false;
					break;
				}
				sum += dep;
				ans[++ans[0]] = fa;
			}
		}
		if (flag) {
			printf("YES\n");
			for (int i = 1;i < n;i++) printf("%d ", ans[i]);
			printf("\n");
		}
		else printf("NO\n");
	}
}
2023/9/5 21:14
加载中...