2020牛客多校第七场B题Mask Allocation(构造算法)

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

题意:给你t个测试样例,每个样例给你n*m个口罩,你要分给n个医院或者m个医院,每个医院分到的口罩数量一样,找出怎么样分使得分的个数最少

题解:构造算法 我们保证(n<m)每次都放n个n。就可以满足条件。

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t; 
    cin>>t;
    while (t--) {
        int n, m;
        cin>>n>>m;
        int sum = n * m;
        vector<int> ans;
        while(sum!=0){
            if(n > m) swap(n, m);
            for (int i = 1; i <= n; i++) ans.push_back(n);
            sum-=n*n;  //每次都放n个n; 
            m=m-n;
        }
        printf("%d\n",ans.size());
        for(int i=0;i<ans.size();i++){
            printf("%d ",ans[i]);
        }
        printf("\n");
    }
}

 

posted @ 2020-08-02 13:57  杰瑞与汤姆  阅读(163)  评论(0编辑  收藏  举报