T1 求调
  • 板块题目总版
  • 楼主yrs2021
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/9/3 17:38
  • 上次更新2023/11/2 22:51:45
查看原帖
T1 求调
555002
yrs2021楼主2023/9/3 17:38

我™心态炸了啊。 题目

#include<bits/stdc++.h>
#define N 100100
using namespace std;
int re,n,d,k,t,b,o,ans[N],cnt,first[N],p[N];
char c;
int read(){
	re=0;
	c=getchar();
	while(c<'0'||c>'9'){
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		re=(re<<3)+(re<<1)+(c^48);
		c=getchar();
	}
	return re;
}
void write(int x){
	if(x/10){
		write(x/10);
	}
	putchar(x%10|48);
}
int main(){
	t=read();
	while(t--){
		n=read();
		d=read();
		k=read();
		if(n==1&&d==0){
			putchar('Y');
			putchar('E');
			putchar('S');
			putchar('\n');
			putchar('\n');
			continue;
		}
		b=1;
		cnt=0;
		o=true;
		for(int j = 1;b<=n-k;j++){
			if(j*k<n)break;
			first[j]=b;
			for(int i = b;i < n;i++){
				ans[i]=j;
			}
			cnt+=n-b;
			if(cnt==d){
				putchar('Y');
				putchar('E');
				putchar('S');
				putchar('\n');
				for(int i = 1;i<n;i++){
					write(first[ans[i]-1]+1);
					putchar(' ');
				}
				putchar('\n');
				o=false;
				break;
			}
			else if(cnt>d&&j!=1){
				for(int i = b;i<=b+cnt-d-1;i++){
					ans[i]=j-1;
				}
				first[j]=b+cnt-d;
				if(n-b-cnt+d<k){
					break;
				}
				putchar('Y');
				putchar('E');
				putchar('S');
				putchar('\n');
				for(int i = 1;i<n;i++){
					write(first[ans[i]-1]+1);
					putchar(' ');
				}
				putchar('\n');
				o=false;
				break;
			}
			else if(cnt>d&&j==1){
				break;
			}
			b+=k;
		}
		if(o){
			putchar('N');
			putchar('O');
			putchar('\n');
		}
	}
	return 0;
}

2023/9/3 17:38
加载中...