https://ac.nowcoder.com/acm/contest/5672/B

题意:

有两种医院,重症医院和轻症医院;

现在有n家重症医院和m家轻症医院,n*m个口罩;

用最少的盒子装(盒子不能拆开)这n*m个口罩,若分配给n家重症医院,每家医院m个口罩,若分配给m家轻症医院,每家医院n个口罩;

求最少的盒子数,并按字典序从大到小打印每个盒子装的口罩数量。

 

代码:

#include <bits/stdc++.h>
using namespace std;
const long long mod =1e9+7;
typedef long long ll;
typedef __int128 LL;
const int inf =0x3f3f3f3f;
const long long INF =0x3f3f3f3f3f3f3f3f;
const int MAXN =2e5+5;
int ans[MAXN];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m;
        scanf("%d%d",&n,&m);

        int cnt=0;
        while(n&&m)
        {
            if(n<m)swap(n,m);
            for(int i=1;i<=m;i++)ans[++cnt]=m;
            n-=m;
        }
        printf("%d\n",cnt);
        for(int i=1;i<=cnt;i++)printf("%d%c",ans[i],i==cnt?'\n':' ');


    }

    return 0;
}
View Code

 

posted on 2020-08-01 21:29  MZRONG  阅读(178)  评论(0编辑  收藏  举报