selpo's diary

主に競プロの解説をします。C#erです。

問題A『DISCO presents ディスカバリーチャンネルプログラミングコンテスト 2016 Ⅱ』 : DDPC(DISCO presents ディスカバリーチャンネル プログラミングコンテスト)2016 本選

めっちゃ簡単ですが、最初の記事ということで。

問題文 : DISCO presents ディスカバリーチャンネルプログラミングコンテスト 2016 Ⅱ

概要

順位に応じて以下のように賞金が決まっている。

1位: 100000
2位: 50000
3位: 30000
4位: 20000
5位: 10000
6位以下: 0

また、N人のうち、i位であった人の番号Id_iが順に与えられる。
番号順に、獲得した賞金を出力せよ。

制約

5\leq N\leq 100
1\leq Id_i\leq N

解説

Id_i=kの人の賞金B_kを問題文の通り求めて出力するだけ。
計算量はO(N)

ソースコード

using System;
class Program
{
	static int F() { return int.Parse(Console.ReadLine()); }
	static void Main()
	{
		var N = F();
		var B = new int[N];
		for (var i = 0; i < N; i++)
		{
			var id = F() - 1;
			if (i == 0) B[id] = 100000;
			else if (i == 1) B[id] = 50000;
			else if (i == 2) B[id] = 30000;
			else if (i == 3) B[id] = 20000;
			else if (i == 4) B[id] = 10000;
			else B[id] = 0;
		}
		for (var i = 0; i < N; i++) Console.WriteLine(B[i]);
	}
}

ちなみに、わざわざIdを全部読まなくても、

using System;
class Program
{
	static int F() { return int.Parse(Console.ReadLine()); }
	static void Main()
	{
		var N = F();
		var B = new int[N + 1];
		B[F()] = 100000;
		B[F()] = 50000;
		B[F()] = 30000;
		B[F()] = 20000;
		B[F()] = 10000;
		for (var i = 1; i <= N; i++) Console.WriteLine(B[i]);
	}
}

でもOK。