求助WA#5【悬关】
查看原帖
求助WA#5【悬关】
780539
qwertim楼主2023/8/24 19:56
#include<bits/stdc++.h>
#define ll long long
#define fo(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
ll n,k,limit=100000,a[200005],tp,tmp,cnt;
int main(){//limit代表0的分界点
	cin>>n>>k;
	tp=n;
	while(tp)cnt+=(a[limit+(tmp++)]=tp&1),tp>>=1;
	if(cnt>k)return cout<<"No",0;
	puts("Yes");
	while(cnt<k){
		if(cnt+a[limit+tmp]>k)break;
		cnt+=a[limit+tmp],a[limit+tmp-1]+=a[limit+tmp]*2,a[limit+(tmp--)]=0;
	}
	for(int i=200000;i;i--)
		if(a[i])tmp=i;
	while(cnt<k){
		if(cnt+a[tmp]>k){
			a[tmp]-=k-cnt,a[tmp-1]=(k-cnt)*2;
			break;
		}
		cnt+=a[tmp],a[tmp-1]=a[tmp]*2,a[tmp--]=0;
	}
	for(int i=200000;i;i--)
		fo(j,1,a[i])printf("%d ",i-limit);
	return 0;
}

评测记录 ;https://vjudge.net/solution/45042668/origin

2023/8/24 19:56
加载中...