2020 Niuke Multi-school Tournament 7th B Mask Allocation

トピックリンク
問題解決のアイデア:
全体的なアイデアはn*m最初から一緒にできるように変えることm*nです。
n * m個のアイテムがあると仮定します。常にn <= mであることを保証する前提で、この時点でn = mの場合、最初にアイテムをn m個のグループに分割します(取得できるグループの最小数はn個のグループであるため)。つまり、そうでなければ、これらのn mはn nとn(mn)に変更されます。このときに考慮する必要がある問題は、本質的に(nm)* nの問題です。項目が分割されるまで上記の操作を繰り返します。

ACコード:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int maxn = 100005;
int T,m,n,top;
int a[maxn];
int main()
{
    
    
	cin>>T;
	while(T--){
    
    
		cin>>n>>m;
		memset(a,0,sizeof(a));
		top = 0;
		if (n > m) swap(n,m);
		while(n){
    
    
			for (int i=1; i<=n; i++) a[++top] = n;
			int c = m-n;
			m = n; 
			n = c;
			if (n > m) swap(n,m);
		}
		cout<<top<<endl;
		for (int i=1; i<=top; i++) cout<<a[i]<<" ";
		cout<<endl;
	} 
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_44063734/article/details/107863638