結果

問題 No.173 カードゲーム(Medium)
ユーザー threepipes_sthreepipes_s
提出日時 2015-03-27 22:54:42
言語 Java21
(openjdk 21)
結果
AC  
実行時間 755 ms / 3,000 ms
コード長 3,623 bytes
コンパイル時間 2,432 ms
コンパイル使用メモリ 81,184 KB
実行使用メモリ 52,432 KB
最終ジャッジ日時 2024-06-29 01:27:16
合計ジャッジ時間 9,230 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 150 ms
45,032 KB
testcase_01 AC 230 ms
47,572 KB
testcase_02 AC 712 ms
50,976 KB
testcase_03 AC 686 ms
51,528 KB
testcase_04 AC 644 ms
51,060 KB
testcase_05 AC 755 ms
52,432 KB
testcase_06 AC 683 ms
52,164 KB
testcase_07 AC 569 ms
51,364 KB
testcase_08 AC 555 ms
50,616 KB
testcase_09 AC 721 ms
50,896 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

public class Main {
	public static void main(String[] args) throws NumberFormatException,
	IOException {
		ContestScanner in = new ContestScanner();
		int n = in.nextInt();
		final int trial = 100000;
		double pa = in.nextDouble();
		double pb = in.nextDouble();
		int[] a = new int[n];
		int[] b = new int[n];
		for(int i=0; i<n; i++){
			a[i] = in.nextInt();
		}
		for(int i=0; i<n; i++){
			b[i] = in.nextInt();
		}
		Arrays.sort(a);
		Arrays.sort(b);
		Random rand = new Random();
		double winNum = 0;
		
		for(int i=0; i<trial; i++){
			List<Integer> ca = new ArrayList<Integer>();
			List<Integer> cb = new ArrayList<Integer>();
			int scoreA = 0;
			int scoreB = 0;
			for(int j=0; j<n; j++){
				ca.add(a[j]);
				cb.add(b[j]);
			}
			while(!ca.isEmpty()){
				int cardA;
				int cardB;
				if(rand.nextDouble() <= pa || ca.size() == 1){
					cardA = ca.remove(0);
				}else{
					cardA = ca.remove(rand.nextInt(ca.size()-1)+1);
				}
				if(rand.nextDouble() <= pb || cb.size() == 1){
					cardB = cb.remove(0);
				}else{
					cardB = cb.remove(rand.nextInt(cb.size()-1)+1);
				}
				if(cardA > cardB){
					scoreA += cardA + cardB;
				}else if(cardA < cardB){
					scoreB += cardA + cardB;
				}
				Collections.sort(ca);
				Collections.sort(cb);
			}
			if(scoreA > scoreB){
				winNum++;
			}
		}
		System.out.println(winNum/trial);
	}
}

class MyComp0 implements Comparator<int[]> {
	public int compare(int[] a, int[] b) {
		return a[0] - b[0];
	}
}

class MyComp1 implements Comparator<long[]> {
	public int compare(long[] a, long[] b) {
		return Long.compare(a[1], b[1]);
	}
}

class Reverse implements Comparator<Integer> {
	public int compare(Integer arg0, Integer arg1) {
		return arg1 - arg0;
	}
}

class Node{
	int id;
	List<Node> edge = new ArrayList<Node>();

	public Node(int id) {
		this.id = id;
	}

	public void createEdge(Node node) {
		edge.add(node);
	}
}

class ContestWriter {
	private PrintWriter out;

	public ContestWriter(String filename) throws IOException {
		out = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
	}

	public ContestWriter() throws IOException {
		out = new PrintWriter(System.out);
	}

	public void println(String str) {
		out.println(str);
	}

	public void print(String str) {
		out.print(str);
	}

	public void close() {
		out.close();
	}
}

class ContestScanner {
	private BufferedReader reader;
	private String[] line;
	private int idx;

	public ContestScanner() throws FileNotFoundException {
		reader = new BufferedReader(new InputStreamReader(System.in));
	}

	public ContestScanner(String filename) throws FileNotFoundException {
		reader = new BufferedReader(new InputStreamReader(new FileInputStream(
				filename)));
	}

	public String nextToken() throws IOException {
		if (line == null || line.length <= idx) {
			line = reader.readLine().trim().split(" ");
			idx = 0;
		}
		return line[idx++];
	}

	public long nextLong() throws IOException, NumberFormatException {
		return Long.parseLong(nextToken());
	}

	public int nextInt() throws NumberFormatException, IOException {
		return (int) nextLong();
	}

	public double nextDouble() throws NumberFormatException, IOException {
		return Double.parseDouble(nextToken());
	}
}
0