Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

AtCoder Beginner Contest 095

※今回は不参加で、問題はすべてコンテスト終了後に解きました。

A - Something on It

import static java.lang.System.*;
import java.util.*;
 
public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		String s = sc.next();
		int price = 700;
		for (int i=0; i<3; i++) {
			if (s.charAt(i)=='o') price += 100;
		}
		out.println(price);
	}
}

B - Bitter Alchemy

import static java.lang.System.*;
import java.util.*;
 
public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		int n=sc.nextInt(), x=sc.nextInt();
		int min = Integer.MAX_VALUE;
		for (int i=0; i<n; i++) {
			int temp = sc.nextInt();
			min = Math.min(min,temp);
			x -= temp;
		}
		out.println(n+(x/min));
	}
}

入力で与えられたn種類のドーナツについては、すべて作れることが保障されているので、まずはそれを作る。残った粉で、一番粉消費が少ないドーナツを作れるだけ作る。


C - Half and Half

import static java.lang.System.*;
import java.util.*;
 
public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		int a=sc.nextInt(), b=sc.nextInt(), c=sc.nextInt(), x=sc.nextInt(), y=sc.nextInt();
		int total = 0;
		if (a+b > 2*c) { //ABピザを買う必要あり
			total += 2*c*(Math.min(x,y));
			if (x > y) {
				total += (x-y)*a;
			}
			else if (x < y) {
				total += (y-x)*b;
			}
			int total2 = 2*c*(Math.max(x,y));
			out.println(Math.min(total,total2));
		}
		else {
			total = a*x + b*y;
			out.println(total);
		}
	}
}

まず、(a+b > 2*c)の条件式によって、ABピザを作る必要があるかどうか判断する。作らない場合は簡単。
ABピザを作る場合だが、「最低限の数だけABピザを作り、残りをAピザもしくはBピザで補う場合」と、「余ることが前提でABピザを作り、AピザとBピザは1枚も作らない場合」に分けられる。前者はmin(x,y)個、後者はmax(x,y)個ということだ。
それぞれ実際に作ってみて、金額が少ないほうを出力する。


D - Static Sushi

部分点の解のほうは理解できそうだったけれど、とりあえず先送り


まとめ

とくになし