這應該是比較容易的一道數論題了。
枚舉一些:
發現一個大事情:
還有更多:
於是發現:
於是,稍微變以下再模擬一下。。
long long n,m,p[100010],t;
int main()
{
n=read();
m=read();
int t=1;
while((n-t)*(n-t-1)/2>=m&&t<=n)
{
p[t]=t;
t++;
}//求可以直接上最小的 的個數
int o=m-(n-t)*(n-t-1)/2+t;//求接下來的第一個的值
p[t]=o;
int k=t-1;
fd(i,n,t+1)
{
k++;
if(k<o)
p[i]=k;
else
p[i]=k+1;
}//倒序填數
fr(i,1,n)
printf("%lld%c",p[i],i==n?'\n':' ');
return 0;
}
看來跑得還算快。。。