トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ARC-001-A センター採点

■■■問題■■■

高橋君はセンター試験を受けました。
センター試験の各々の問題は1から4までの選択肢があります。

高橋君はあまり勉強をしていなかったので、全ての問題で同じ選択肢を選びました。

試験終了後、センター試験の解答が与えられましたが、高橋君は何番を選んだのかを忘れてしまいました。
しかし、高橋君は自分の点数が気になります。

そこで、高橋君のため、高橋君が正解する問題の数として考えられる最大と最小の数を求めなさい。 

■■■入力■■■

N
c1 c2 c3 ・・・ cN

●1行目は、センター試験の問題の数を表す整数 N (1 <= N <= 100) が与えられる。
●2行目は、センター試験の解答を表す N 文字の文字列が与えられる。
この文字列のi文字目 (1 <= i <= N) の文字 ci (ci は 1、2、3、4 のいずれかである) は、
i番目の問題の正解が ci であったことを表す。

■■■出力■■■

高橋君が正解する問題の数として考えられる最大と最小の数を空白区切りで1行に出力せよ。


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("9");
            WillReturn.Add("131142143");
            //4 1
            //選択肢1を選ぶ時、高橋君が正解する問題の数は4問となり、これが最大の正解数です
            //選択肢2を選ぶ時、高橋君が正解する問題の数は1問となり、これが最小の正解数です
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("20");
            WillReturn.Add("12341234123412341234");
            //5 5
            //1,2,3,4のいずれの選択肢を選んだ場合も、正答数は5問であり、
            //高橋君が正解する問題の数の最小と最大の数はいずれも5となります
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("4");
            WillReturn.Add("1111");
            //4 0
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        IEnumerable<char> MarkArr = InputList[1].ToCharArray();

        var wkDict = new Dictionary<char, int>();
        for (char I = '1'; I <= '4'; I++) {
            wkDict[I] = MarkArr.Count(X => X == I);
        }

        IEnumerable<int> wkEnum = wkDict.Values;
        Console.WriteLine("{0} {1}", wkEnum.Max(), wkEnum.Min());
    }
}


解説

Dictionaryで選んだ番号ごとのマーク数を管理してます。