結果
問題 |
No.854 公平なりんご分配
|
ユーザー |
![]() |
提出日時 | 2019-07-27 00:11:20 |
言語 | Java (openjdk 23) |
結果 |
MLE
|
実行時間 | - |
コード長 | 2,435 bytes |
コンパイル時間 | 2,735 ms |
コンパイル使用メモリ | 79,588 KB |
実行使用メモリ | 747,288 KB |
最終ジャッジ日時 | 2024-07-02 10:16:34 |
合計ジャッジ時間 | 84,508 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 38 WA * 25 MLE * 18 -- * 11 |
ソースコード
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeSet; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] sa = br.readLine().split(" "); int n = Integer.parseInt(sa[0]); sa = br.readLine().split(" "); int[] a = new int[n]; TreeSet<Integer> zero = new TreeSet<>(); for (int i = 0; i < n; i++) { a[i] = Integer.parseInt(sa[i]); if (a[i] == 0) { zero.add(i); } } sa = br.readLine().split(" "); int q = Integer.parseInt(sa[0]); List<Map<Integer, Integer>> list = new ArrayList<>(n); list.add(new HashMap<>()); for (int i = 0; i < n; i++) { Map<Integer, Integer> soinsu = bunkai(a[i]); for (Integer o : list.get(i).keySet()) { if (soinsu.containsKey(o)) { soinsu.put(o, soinsu.get(o) + list.get(i).get(o)); } else { soinsu.put(o, list.get(i).get(o)); } } list.add(soinsu); } PrintWriter pw = new PrintWriter(System.out); for (int i = 0; i < q; i++) { sa = br.readLine().split(" "); int p0 = Integer.parseInt(sa[0]); int p1 = Integer.parseInt(sa[1]); int p2 = Integer.parseInt(sa[2]); if (p0 == 1) { pw.println("Yes"); continue; } if (zero.ceiling(p1 - 1) != null && zero.floor(p2 - 1) != null) { pw.println("NO"); continue; } Map<Integer, Integer> soinsu = bunkai(p0); Map<Integer, Integer> l = list.get(p1 - 1); Map<Integer, Integer> r = list.get(p2); boolean flg = true; for (Integer o : soinsu.keySet()) { int x = soinsu.get(o); Integer y = l.get(o); if (y == null) y = 0; Integer z = r.get(o); if (z == null) z = 0; if (x > z - y) { flg = false; break; } } if (flg) { pw.println("Yes"); } else { pw.println("NO"); } } pw.flush(); } static Map<Integer, Integer> bunkai(int n) { Map<Integer, Integer> soinsu = new HashMap<>(); int end = (int) Math.sqrt(n); int d = 2; while (n > 1) { if (n % d == 0) { n /= d; if (soinsu.containsKey(d)) { soinsu.put(d, soinsu.get(d) + 1); } else { soinsu.put(d, 1); } end = (int) Math.sqrt(n); } else { if (d > end) { d = n - 1; } d++; } } return soinsu; } }