1017 Packets

「1017 Packets」の編集履歴(バックアップ)一覧はこちら

1017 Packets」(2006/05/13 (土) 18:36:40) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

**1017 Packets **解答例 import java.util.*; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); while(true){ int p1 = sc.nextInt(); int p2 = sc.nextInt(); int p3 = sc.nextInt(); int p4 = sc.nextInt(); int p5 = sc.nextInt(); int p6 = sc.nextInt(); if (p1 + p2 + p3 + p4 + p5 + p6 == 0) break; System.out.println(solve(p1, p2, p3, p4, p5, p6)); } } private static int solve(int p1, int p2, int p3, int p4, int p5, int p6) { // size 6x6 if (p6 > 0) { return p6 + solve(p1, p2, p3, p4, p5, 0); } // size 5x5 if (p5 > 0) { int rp1 = Math.max(p1 - 11 * p5, 0); return p5 + solve(rp1, p2, p3, p4, 0, 0); } // size 4x4 if (p4 > 0) { int inp2 = Math.min(5 * p4, p2); int rp2 = p2 - inp2; int inp1 = Math.min(20 * p4 - 4 * inp2, p1); int rp1 = p1 - inp1; return p4 + solve(rp1, rp2, p3, 0, 0, 0); } // size 3x3 if (p3 >= 4) { return p3 / 4 + solve(p1, p2, p3 % 4, 0, 0, 0); } else if (p3 > 0) { int inp2; int rp2; int inp1; int rp1; switch (p3) { case 3: inp2 = Math.min(1, p2); rp2 = p2 - inp2; inp1 = Math.min(9 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); case 2: inp2 = Math.min(3, p2); rp2 = p2 - inp2; inp1 = Math.min(18 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); default:/* 1 */ inp2 = Math.min(5, p2); rp2 = p2 - inp2; inp1 = Math.min(27 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); } } // size 2x2 1x1 return ((4 * p2 + p1) + 35) / 36; } } class Point { int x, y; } class Solver { int m; int n; int a[][]; int s[][]; public Solver(int m, int n, int[][] a) { // TODO Auto-generated constructor stub this.m = m; this.n = n; this.a = a; } }
**1017 Packets **解答例 import java.util.*; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); while(true){ int p1 = sc.nextInt(); int p2 = sc.nextInt(); int p3 = sc.nextInt(); int p4 = sc.nextInt(); int p5 = sc.nextInt(); int p6 = sc.nextInt(); if (p1 + p2 + p3 + p4 + p5 + p6 == 0) break; System.out.println(solve(p1, p2, p3, p4, p5, p6)); } } private static int solve(int p1, int p2, int p3, int p4, int p5, int p6) { // size 6x6 if (p6 > 0) { return p6 + solve(p1, p2, p3, p4, p5, 0); } // size 5x5 if (p5 > 0) { int rp1 = Math.max(p1 - 11 * p5, 0); return p5 + solve(rp1, p2, p3, p4, 0, 0); } // size 4x4 if (p4 > 0) { int inp2 = Math.min(5 * p4, p2); int rp2 = p2 - inp2; int inp1 = Math.min(20 * p4 - 4 * inp2, p1); int rp1 = p1 - inp1; return p4 + solve(rp1, rp2, p3, 0, 0, 0); } // size 3x3 if (p3 >= 4) { return p3 / 4 + solve(p1, p2, p3 % 4, 0, 0, 0); } else if (p3 > 0) { int inp2; int rp2; int inp1; int rp1; switch (p3) { case 3: inp2 = Math.min(1, p2); rp2 = p2 - inp2; inp1 = Math.min(9 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); case 2: inp2 = Math.min(3, p2); rp2 = p2 - inp2; inp1 = Math.min(18 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); default:/* 1 */ inp2 = Math.min(5, p2); rp2 = p2 - inp2; inp1 = Math.min(27 - 4 * inp2, p1); rp1 = p1 - inp1; return 1 + solve(rp1, rp2, 0, 0, 0, 0); } } // size 2x2 1x1 return ((4 * p2 + p1) + 35) / 36; } } class Point { int x, y; } class Solver { int m; int n; int a[][]; int s[][]; public Solver(int m, int n, int[][] a) { // TODO Auto-generated constructor stub this.m = m; this.n = n; this.a = a; } }

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。