2020牛客多校第七场 B.Mask Allocation 构造

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
",cnt);
        for(int i=1;i<=cnt;i++)printf("%d%c",ans[i],i==cnt?'
':' ');


    }

    return 0;
}
View Code
原文地址:https://www.cnblogs.com/MZRONG/p/13416663.html