题意: 有个
类医院,
个
类医院,共
个口罩。要你对这些口罩进行分箱,使得将所有口罩分给
类医院时可以均分,将所有口罩分给
类医院时也可以均分。
数据范围:
题解: 设,那么一个箱子最多
个口罩,否则若有某个箱子口罩数多于
,当分给
类医院时,必然存在某些医院分到多于
个口罩,某些医院分到少于
个口罩。
所以可以先分出来箱,每箱有
个口罩。
之后:
- 对于分给
类医院,还有
个医院各需要
个口罩。
- 对于分给
类医院,
个医院还有需要
个口罩。
可以发现这是一个子问题。考虑
所以循环一遍即可。
代码:
#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; }