![](https://i-blog.csdnimg.cn/blog_migrate/4744acb4018eb9e354a699745ccd79bb.png)
题意:
n个球,你需要用若干个圆形盒子,将这些球按照一定的规则排好,使其所有的球都可以到最左边的那个方格里,规则就是只有当第i个圆形盒子中有i个球的时候才能将其所有的i球分到其左边的每个盒子中,包括方形格子,问你这n个球的在这些若干个盒子中的分布情况
分析:构造一下
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstring>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define rep(i,a,b) for(int i=a;i<=b;i++)
typedef long long ll;
using namespace std;
const int N=1e5+10;
const int INF=0x3f3f3f3f;
int a[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLINE_JUDGE
int T;
scanf("%d",&T);
while(T--){
int o;
scanf("%d",&o);printf("%d ",o);
int n;
scanf("%d",&n);
memset(a,0,sizeof a);
int ub=0;
for(int i=1;i<=n;i++){
for(int j=1;;j++){
if(a[j]==0){
a[j]=j;
ub=max(j,ub);
break;
}
a[j]--;
}
}
printf("%d\n",ub);
for(int i=1;i<=ub;i++){
printf("%d",a[i]);
if(i%10==0 || i==ub)
printf("\n");
else
printf(" ") ;
}
// printf("\n");
}
return 0;
}