第2週HDU-1004題解

7281 ワード

質問リンク:HDU-1004
問題の概要
最初の行には熱気球の個数を表す整数nを入力し、次にn行には行ごとに色単語(長さ15文字未満)を入力し、出現回数が最も多い色を見つけ、この色を出力します.
構想
mapを用いて,色ごとに出現する回数をカウントし,最後に最も多くの色を出力する.(私が打ったプログラムにバグがあるのですが・・・2回目の入力時にあり、2回ループするので、30行のifにif条件文を入れて、このバグを回避します)
ACが通過するC++言語プログラムは以下の通りである.
#include
#include
#include
#include
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		string a, y; vector<string> b; map<string, int> c; int x = 1;
		if (n == 0) break;
		for (int i = 0; i < n; i++)
		{
			cin >> a;
			if (i == 0) { b.push_back(a); c[a] = 1; y = a; }
			else
				for (int j = 0; j < b.size(); j++)
				{
					if (a == b[j])
					{
						c[a]++;
						if (c[a] > x)
						{
							x = c[a];
							y = a;
						}
						break;
					}
					if (j == b.size() - 1) { b.push_back(a); c[a] = 1; if (b.size() == 2) break; }
				}
		}
		cout << y << endl;
	}
	return 0;
}