結果
問題 |
No.854 公平なりんご分配
|
ユーザー |
![]() |
提出日時 | 2020-03-18 15:06:34 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,551 bytes |
コンパイル時間 | 1,318 ms |
コンパイル使用メモリ | 159,736 KB |
実行使用メモリ | 13,768 KB |
最終ジャッジ日時 | 2024-12-14 01:59:55 |
合計ジャッジ時間 | 161,761 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 55 TLE * 37 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define U 100010 int A[U]; int P[U]; int L[U]; int R[U]; int ord_A[U]; bool is_prime[2010]; bool ok[U]; int main() { int N; cin >> N; for (int i = 0; i < N; i++) { cin >> A[i]; } int Q; cin >> Q; for (int i = 0; i < Q; i++) { ok[i] = true; cin >> P[i]; cin >> L[i]; cin >> R[i]; } is_prime[2] = 1; for (int i = 3; i < 2010; i += 2) { is_prime[i] = 1; } for (int p = 3; p * p < 2010; p += 2) { if (is_prime[p]) { for (int i = p * p; i < 2010; i += p) { is_prime[i] = 0; } } } for (int p = 2; p < 2010; p++) { if (!is_prime[p]) continue; for (int i = 0; i < N; i++) { int e = 0; while (A[i] % p == 0) { A[i] /= p; e++; } ord_A[i + 1] = ord_A[i] + e; } for (int i = 0; i < Q; i++) { int e = 0; while (P[i] % p == 0) { P[i] /= p; e++; } int f = ord_A[R[i]] - ord_A[L[i] - 1]; if (f < e) { ok[i] = false; } } } for (int i = 0; i < Q; i++) { if (ok[i] and P[i] == 1) { cout << "Yes\n"; } else { cout << "NO\n"; } } }