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

No.182 新規性の虜

■■■問題■■■

kamipeipaa君は新しいものが大好きです。
kamipeipaa君はある日N個の整数A1,A2,A3,....,ANを見つけました。

整数Aiに対して,Ai=Ajとなるjがi以外に存在しなければ,
Aiは新規性があるのではないかとkamipeipaa君は考えました。
上記の条件を満たす整数がいくつあるかkamipeipaa君に教えてあげてください。

■■■入力■■■

N
A1 A2 ・・・ AN

1行目にkamipeipaa君が見つけた数の総数N(1 <= N <= 10万)が与えられる。
2行目にkamipeipaa君が見つけた数A1,A2, ・・・ ,AN(1 <= Ai <= 10億)が空白区切りで与えられる。

■■■出力■■■

条件を満たすようなものの数を1行に出力せよ。改行を忘れないこと。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input4";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("5");
            WillReturn.Add("1 1 2 3 3");
            //1
            //新規性がありそうなものは2のみです。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("6");
            WillReturn.Add("1 1 1 1 1 1");
            //0
            //全く新規性がなさそうなこともあります。
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("6");
            WillReturn.Add("1 2 3 4 5 6");
            //6
            //全て新規性がありそうなこともあります。
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] AArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();

        var Tmp = AArr.GroupBy(X => X).Where(X => X.Count() == 1);
        Console.WriteLine(Tmp.Count());
    }
}


解説

LINQのGroupByメソッドでグループ化してから、
件数が1のグループの数を調べてます。