結果
問題 | No.15 カタログショッピング |
ユーザー | ぴろず |
提出日時 | 2014-12-20 00:13:34 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 389 ms / 5,000 ms |
コード長 | 1,812 bytes |
コンパイル時間 | 3,122 ms |
コンパイル使用メモリ | 81,636 KB |
実行使用メモリ | 50,328 KB |
最終ジャッジ日時 | 2024-06-12 01:58:24 |
合計ジャッジ時間 | 6,380 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 143 ms
41,048 KB |
testcase_01 | AC | 143 ms
41,400 KB |
testcase_02 | AC | 144 ms
41,848 KB |
testcase_03 | AC | 146 ms
41,672 KB |
testcase_04 | AC | 140 ms
41,372 KB |
testcase_05 | AC | 322 ms
49,556 KB |
testcase_06 | AC | 336 ms
50,328 KB |
testcase_07 | AC | 325 ms
50,224 KB |
testcase_08 | AC | 389 ms
50,312 KB |
testcase_09 | AC | 329 ms
49,956 KB |
ソースコード
package no015; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int s = sc.nextInt(); int[] p = new int[n]; for(int i=0;i<n;i++) { p[i] = sc.nextInt(); } ArrayList<Pair> g1 = new ArrayList<>(); ArrayList<Pair> g2 = new ArrayList<>(); int n1 = n/2; int n2 = n - n1; for(int i=0;i<1<<n1;i++) { int sum = 0; for(int j=0;j<n1;j++) { if ((i>>j&1) == 1) { sum += p[n1-1-j]; } } g1.add(new Pair(sum,(long) i<<n2)); } for(int i=0;i<1<<n2;i++) { int sum = 0; for(int j=0;j<n2;j++) { if ((i>>j&1) == 1) { sum += p[n-1-j]; } } g2.add(new Pair(sum,i)); } Collections.sort(g1); Collections.sort(g2); ArrayList<Long> ans = new ArrayList<>(); int j = (1<<n2)-1; for(int i=0;i<1<<n1;i++) { while(j >= 0 && g1.get(i).sum + g2.get(j).sum > s) { j--; } int j2 = j; while(j >= 0 && g1.get(i).sum + g2.get(j).sum == s) { ans.add(g1.get(i).i + g2.get(j).i); j--; } j = j2; } Collections.sort(ans,Collections.reverseOrder()); for(long l:ans) { ArrayList<Integer> items = new ArrayList<>(); for(int i=0;i<n;i++) { if ((l>>i&1)==1) { items.add(n-1-i); } } Collections.reverse(items); StringBuilder sb = new StringBuilder(); for(int i=0;i<items.size();i++) { if (i >= 1) { sb.append(' '); } sb.append(items.get(i) + 1); } System.out.println(sb.toString()); } } static class Pair implements Comparable<Pair>{ long i; int sum; public Pair(int sum,long i) { this.sum = sum; this.i = i; } @Override public int compareTo(Pair o) { return Integer.compare(sum, o.sum); } } }