BerSUボール------貪欲

バーランド州立大学は、その100500-周年のお祝いに社交ダンスをホストしています!nは少年メートルの女の子はすでに忙しいリハーサルのワルツ、メヌエット、ポロネーズと方眼移動します。

我々はいくつかの男の子&女の子のペアがボールに招待しようとしていることを知っています。しかし、各ペアのパートナーのダンスのスキルはほとんど1でによって異なっていなければなりません。

各少年のために、私たちは彼のダンスのスキルを知っています。同様に、各女の子のために、私たちは、彼女のダンスのスキルを知っています。N少年及びM girlsから形成することができる対の最大可能数を決定することができるコードを書きます。

入力
少年の数-最初の行は、整数N(1≤N≤100)を含みます。2行目は、Aiはi番目の少年のダンスのスキルであるシーケンスA1、A2、...、(≤100を愛≤1)を、含まれています。

女の子の数 - 同様に、第3のラインは、整数m(1≤M≤100)を含みます。4行目はBJがj番目の女の子のダンススキルであるシーケンスB1、B2、···、BM(1≤BJ≤100)を、含まれています。

出力は、
ペアの必要な最大数-単一番号を印刷します。

実施例
インプット
4
1〜4 6 2
5
5 1 5 7 9
の出力
3

入力
4
1 2 3 4
4
10 11 12 13
出力
0

入力
5
1 1 1 1 1
3
1 2 3
出力
2

問題の意味

社交ダンス、m個の男の子と女の子、男と女のフォームグループnがある、しかし、相手のダンススキルのそれぞれが唯一のポイントまでの違いがあることができます。我々は、すべての男の子と女の子のダンスがどのくらいであることを知っている、と尋ねた:n個のm個の男の子と女の子の最大のグループを形成することができます。

問題解決のためのアイデア

アイデアは比較的簡単な質問、私の最初の考えは最初の少年を決定することで、この質問を参照してください、そして女の子の予選を探し、条件の遵守があり、グループは削除つけ、次の男の子を続けますそうでない場合、そのまま次の少年。コードの実装を容易にするために、二つの配列を反復処理するために、最初にソートすることができ、

コードの実装:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e3 + 10;
int a[N],b[N];
int main()
{
	int m,w;
	cin >> m;
	for (int i = 0; i < m; i++)
		cin >> a[i];
	cin >> w;
	for (int i = 0; i < w; i++)
		cin >> b[i];
	sort(a, a + m);//男孩排序
	sort(b, b + w);//女孩排序
	int k = 0,ans=0;
	for (int i = 0; i < m; i++)//遍历男孩
	{
		for (int j =k ; j < w; j++)//遍历女孩
		{
			if (b[j] == a[i] || b[j] == (a[i] - 1) || b[j] == (a[i] + 1))
			//判断是否有符合的
			{
				ans++;
				k = j + 1;
				break;
			}
			else
				continue;
		}
	}
	cout << ans << endl;
	return 0;
}
公開された22元の記事 ウォン称賛25 ビュー2208

おすすめ

転載: blog.csdn.net/SDAU_LGX/article/details/104930110