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"); } }