結果
| 問題 |
No.968 引き算をして門松列(その3)
|
| コンテスト | |
| ユーザー |
CuriousFairy315
|
| 提出日時 | 2020-01-13 21:06:31 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 659 ms / 2,000 ms |
| コード長 | 2,153 bytes |
| コンパイル時間 | 2,681 ms |
| コンパイル使用メモリ | 77,256 KB |
| 実行使用メモリ | 48,492 KB |
| 最終ジャッジ日時 | 2024-12-22 20:51:24 |
| 合計ジャッジ時間 | 8,215 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 10 |
ソースコード
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
try (Scanner sc = new Scanner(System.in)) {
int T = sc.nextInt();
while((T--) > 0) {
int A = sc.nextInt(), B = sc.nextInt(), C = sc.nextInt();
long X = sc.nextInt(), Y = sc.nextInt(), Z = sc.nextInt();
int a, b, c;
long INF = 2_000_000_000_000_000_000L;
long cost = INF;
// 2つを引くのは1個を足すのに等しいが、構築可能判定が必要
{ // 1. A<C<B
a = A;
c = Math.max(a + 1, C);
b = Math.max(c + 1, B);
if (A > (b - B) + (c - C) && B > (a - A) + (c - C) && C > (a - A) + (b - B))
cost = Math.min(cost, Y * (a - A) + Z * (b - B) + X * (c - C));
}
{ // 2. C<A<B
c = C;
a = Math.max(c + 1, A);
b = Math.max(a + 1, B);
if (A > (b - B) + (c - C) && B > (a - A) + (c - C) && C > (a - A) + (b - B))
cost = Math.min(cost, Y * (a - A) + Z * (b - B) + X * (c - C));
}
{ // 3. B<A<C
b = B;
a = Math.max(b + 1, A);
c = Math.max(a + 1, C);
if (A > (b - B) + (c - C) && B > (a - A) + (c - C) && C > (a - A) + (b - B))
cost = Math.min(cost, Y * (a - A) + Z * (b - B) + X * (c - C));
}
{ // 4. B<C<A
b = B;
c = Math.max(b + 1, C);
a = Math.max(c + 1, A);
if (A > (b - B) + (c - C) && B > (a - A) + (c - C) && C > (a - A) + (b - B))
cost = Math.min(cost, Y * (a - A) + Z * (b - B) + X * (c - C));
}
if (cost == INF) System.out.println(-1);
else System.out.println(cost);
}
}
}
}
CuriousFairy315