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

No.221 犯罪都市

■■■問題■■■

Y市にはマフィアの構成員が多く住み、犯罪の温床となっている。
そこで、Y市はマフィア判定器を導入し、
構成員と判定された者をすべて逮捕することにした。

マフィア判定器とは、対象者が一般市民か構成員か99%の精度で判定できる機器である。

Y市の全人口100万人すべてに、
マフィア判定器で「構成員」と判定された者を逮捕する。

しかし、実はY市には1万人あたりN人しか構成員がいないということがわかった。
このとき、逮捕者が出た時、誤認逮捕である確率を求めよ。

答えの誤差は、絶対誤差、相対誤差0.01まで許容される。

■■■入力■■■

N

Nは整数で与えられる
0 <= N <= 10000

■■■出力■■■

誤認逮捕の率を%で出力してください。出力に単位を付ける必要はありません。
最後に改行してください。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input1";

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

        if (InputPattern == "Input1") {
            WillReturn.Add("100");
            //50
            //構成員が10000人につき100人いる場合、50%で誤認逮捕が想定されるようです
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("2500");
            //2.94117647058824
            //構成員が10000人のうち2500人だと2.940%で誤認逮捕が想定されるようです
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("1");
            //99.0196078431373
            //構成員が10000人に1人だと、99%以上で誤認逮捕が想定されるようです
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        decimal N = decimal.Parse(InputList[0]);

        //PA=マフィアで、判定器がマフィアと判定
        //PB=マフィアでなくて、判定器がマフィアと判定
        decimal PA = N / 10000M * 0.99M;
        decimal PB = (10000M - N) / 10000M * 0.01M;

        Console.WriteLine(100M * PB / (PA + PB));
    }
}


解説

条件付き確率の考え方を使ってます。