题意:类医院,类医院,共个口罩。要你对这些口罩进行分箱,使得将所有口罩分给类医院时可以均分,将所有口罩分给类医院时也可以均分。
数据范围:

题解:,那么一个箱子最多个口罩,否则若有某个箱子口罩数多于,当分给类医院时,必然存在某些医院分到多于个口罩,某些医院分到少于个口罩。
所以可以先分出来箱,每箱有个口罩。
之后:

  • 对于分给类医院,还有个医院各需要个口罩。
  • 对于分给类医院,个医院还有需要个口罩。

可以发现这是一个子问题。考虑
所以循环一遍即可。

代码:

#include<bits/stdc++.h>
using namespace std;

/*
n < m
n个n 
对于n个医院,还有n个医院还需要m-n个口罩 
对于m个医院,还有(m-n)个医院需要n个口罩 
*/
int main()
{
    int T;
    scanf("%d", &T);
    while(T--) {
        vector<int> ans;
        int n, m;
        scanf("%d%d", &n, &m);
        if(n > m) swap(n, m);

        while(n != 0) {
            for(int i = 1; i <= n; i++) ans.push_back(n);
            int m1 = m - n, m2 = n;
            n = m1, m = m2;
            if(n > m) swap(n, m);
        }
        int len = ans.size();
        printf("%d\n", len);
        for(int i = 0; i < len; i++) printf("%d%c", ans[i], " \n"[i == len - 1]);
    }

    return 0; 
}