Problem:
Princess' Gamble

お姫様のギャンブル

English text is not available in this practice contest.

ある貧乏な国のおてんばで勇敢なお姫様は，ある日部屋の壁を壊してお城を抜け出し，競馬などのギャンブルが行われている賭博場に入っていった．ところが，ギャンブルなどやったことのないお姫様は，非常に負けが込んでしまった．この状況をおもしろくないと思ったお姫様は，一体どのような仕組みでギャンブルが行われているかを調べてみた．すると，このようなギャンブルではパリミュチュエル方式と呼ばれる方式で配当が決定されていることを突き止めた．

パリミュチュエル方式とは，競走を対象としたギャンブルにおいて配当を決定するために使用する計算方法である．この方式では，全ての掛け金をプールし，一定の割合を控除した上で，当選者に掛け金に比例した金額を分配する．

現在お姫様が熱中しているギャンブルは，参加者は競技前にどの競技者が優勝するかを予想する 1枚100ゴールドの投票券を購入し，競技の結果が予想と一致すれば当選金を受け取る権利を得るというものである．なお，ゴールドはこの国の通貨単位である．あなたの仕事は入力として与えられる競技の情報をもとに，投票券一枚あたりの配当を計算するプログラムを書くことである．

先述の方法で計算される配当額が整数にならない場合は，切り捨てによって整数にすること．

Input

入力は複数のデータセットから成る．データセットの個数は100以下である．最後のデータセットの後に，入力の終わりを示す「0 0 0」からなる一行が与えられる．

各データセットは次のような形式をしている．

N M P

X1

...

XN

最初の行の N は投票の対象となる競技者の数，M は優勝した競技者の番号，P は控除率（百分率）を表す整数である． Xi は i 番目の競技者に投票された投票券の枚数である． 1 ≦ N ≦ 100， 1 ≦ M ≦ N， 0 ≦ P ≦ 100， 0 ≦ Xi ≦ 1000 を仮定してよい．

Output

各データセットに対し，当選した投票券一枚あたりの配当金額を示す整数からなる一行を出力せよ．賭けに勝った人がいない場合は0を出力せよ．出力行には他の文字があってはならない．

Sample Input

3 2 50
1
2
3
4 4 75
1
2
3
0
3 1 10
8
1
1
0 0 0

Output for the Sample Input

150
0
112

Solution in JAVA (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	static int[][] map;
	static int[][] directions8 = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 },
			{ 1, 1 } };
	static int[][] directions4 = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
	static int ans;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		while (true) {

			int n = sc.nextInt();
			int m = sc.nextInt();
			int p = sc.nextInt();

			if ((n | m | p) == 0) {
				break;
			}
			// 各競技者の投票数
			int[] x = new int[n];
			int sum = 0;
			for (int i = 0; i < n; i++) {
				// 
				x[i] = sc.nextInt();
				sum += x[i];
			}
			if (x[m - 1] == 0) {
				ans = 0;
			} else {
				ans = sum * 100 * (100 - p) / 100 / x[m - 1];
			}
			System.out.println(ans);

		}

	}

	// BFS用に二つの配列を足し算する
	static int[] addArrayElms(int[] a, int[] b) {
		int[] c = new int[a.length];
		for (int i = 0; i < a.length; i++) {
			c[i] = a[i] + b[i];
		}
		return c;
	}

	// //二分探索
	// k <= num となる最小の配列要素kのインデックスを返す
	static private int binarySearch(long num, long[] orderedArray) {
		int lowerBorder = -1;
		int upperBorder = orderedArray.length;
		int mid;

		while (upperBorder - lowerBorder > 1) {
			mid = (upperBorder + lowerBorder) / 2;
			if (orderedArray[mid] <= num) {
				lowerBorder = mid;
			} else {
				upperBorder = mid;
			}
		}
		return lowerBorder;
	}

	// 二分探索
	// k <= num となる最小のList要素kのインデックスを返す
	static private int binarySearch(long num, ArrayList<Long> orderedList) {
		int lowerBorder = -1;
		int upperBorder = orderedList.size();
		int mid;

		while (upperBorder - lowerBorder > 1) {
			mid = (upperBorder + lowerBorder) / 2;
			if (orderedList.get(mid) <= num) {
				lowerBorder = mid;
			} else {
				upperBorder = mid;
			}
		}
		return lowerBorder;
	}

	// aとbの最小公倍数を求める
	public static int gcd(int a, int b) {
		return b == 0 ? a : gcd(b, a % b);
	}

	public static long gcd(long a, long b) {
		return b == 0 ? a : gcd(b, a % b);
	}
}