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