题解:P11277 世界沉睡童话
①
②
③
任意
当
假设
综上,得证。
④最后讨论一般情况,根据③的结论,我们可以每次先令其中的一个数变成 1 ,则问题会转化为
#include<bits/stdc++.h>
using namespace std;
int re(){
int num=0,fl=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-') fl=-1;ch=getchar();}
while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}
return num*fl;
}
const int N=3e5+100;
int n,a[N],b=1;
long long k;
int main(){
cin>>n>>k;
if(k==0){
for(int i=n;i<=2*n-1;++i) cout<<i<<" ";
}
else{
int nn=n;
while(nn&&k>=nn-1){
a[nn--]=1;k-=nn;
}
while(nn>=4&&k>=3){
a[nn]=a[nn-1]=a[nn-2]=2*n-b;
++b,k-=3,nn-=3;
}
if(k==2) a[nn]=a[nn-1]=2*n-b,++b,nn-=2,--k;
if(k==1) a[nn]=a[nn-1]=2*n-b,++b,nn-=2,--k;
while(nn>0) a[nn]=2*n-b,++b,--nn;
for(int i=1;i<=n;++i) cout<<a[i]<<" ";
}
return 0;
}