トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.79 過小評価ダメ・ゼッタイ
■■■問題■■■
競技プログラミングの出題サイト yurucoder では問題ごとにレベルが設定されています。
問題のレベルはユーザーからアンケートを取り以下のルールで決められます。
●N人のユーザーは問題のレベルをそれぞれ Li として評価する。 (1 <= i <= N)
●多数決を取り、最もユーザーからの回答が多いレベルをその問題のレベルとする。
●最も多い回答を得たものが複数ある場合は、よりレベルの高い方を採用する。
このルールに従い、ユーザーから得た評価から問題のレベルを求めてください。
■■■入力■■■
N
L1 L2 ・・・ LN
1行目に、アンケートに回答するユーザー数を表す整数 N (1 <= N <= 10万) が与えられます。
2行目に、各ユーザーの回答したレベルを表す整数 Li (1 <= Li <= 6) がスペース区切りで与えられます。
■■■出力■■■
多数決で得られた問題のレベルを出力してください。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5");
WillReturn.Add("2 1 2 3 2");
//2
//最も回答の多い2のレベルとなる
}
else if (InputPattern == "Input2") {
WillReturn.Add("5");
WillReturn.Add("1 2 3 3 1");
//3
//1と3が同数なのでより高いレベルの3となる
}
else if (InputPattern == "Input3") {
WillReturn.Add("10");
WillReturn.Add("5 3 5 6 3 6 2 3 5 6");
//6
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] LArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
var tmp1 = LArr.GroupBy(X => X).Select(X => new { X.Key, cnt = X.Count() });
var tmp2 = tmp1.OrderByDescending(X => X.cnt).ThenByDescending(X => X.Key);
Console.WriteLine(tmp2.First().Key);
}
}
解説
LINQを駆使してます。