E - Mancala II

题意:
n个球,你需要用若干个圆形盒子,将这些球按照一定的规则排好,使其所有的球都可以到最左边的那个方格里,规则就是只有当第i个圆形盒子中有i个球的时候才能将其所有的i球分到其左边的每个盒子中,包括方形格子,问你这n个球的在这些若干个盒子中的分布情况

题解:
构造

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>

#define lowbit(x) x & (-x)
#define lson left,mid,root << 1
#define rson mid+1,right,root << 1 | 1

using namespace std;

typedef pair<int, int> PII;
typedef long long ll;
typedef unsigned long long ull;
const ll mod=1e9+7;
const ll inf=0x3f3f3f3f;
const double pi=acos(-1.0);
const double eps=1e-8;
const int maxn=1e5+100;


int main()
{
   int t;
   int p, n;
   int a[maxn];
   scanf("%d",&t);
   while(t --)
    {
      scanf("%d %d",&p, &n);
      printf("%d ",p);
      memset(a, 0, sizeof(a));
      int len = 0;
      for(int i = 1; i <= n; i ++)
        {
          for(int j = 1; ; j ++)
              {
                if(a[j] == 0)
                  {
                    a[j] = j;
                    len = max(j, len);
                    break;
                  }
                a[j] --;
              }

        }
      printf("%d\n",len);
      for(int i = 1; i <= len; i ++)
          {
            printf("%d",a[i]);
            if(i % 10 == 0 || i == len)
              puts("");
            else
              printf(" ");
          }
    }
   return 0;
}

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注