トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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));
}
}
解説
条件付き確率の考え方を使ってます。