結果

問題 No.854 公平なりんご分配
ユーザー maspy
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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";
        }
    }
}
0