题目来源:
https://ac.nowcoder.com/acm/contest/5672/B
题意:
将n×m个口罩打包成若干份,要求打包完后无论是分给n家医院还是m家医院,都能够均分。要求输出总份数最少的方案中字典序最大的。(1≤T≤100,1≤n,m≤104)
解题思路:dfs+递归,关键是在约束条件下同时满足两个条件,所以要一步步推衍。

#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> ans;
void dfs(int n, int m)
{
    if(n < m)
        swap(n, m);
    for(int i = 1; i <= m; i++)
        ans.push_back(m);
    if(n != m)
       dfs(n - m, m);
}

int main()
{
    int q;
    cin>>q;
    while(q--)
    {
       cin>>n>>m;
        ans.clear();
        dfs(n, m);
       cout<<ans.size()<<endl;
        for(int i = 0; i < ans.size(); i++)
        {
            if(i > 0)
              cout<<" ";
            cout<<ant[i];
        }
        cout<<endl;
    }
    return 0;
}