提出 #67792244


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=(int)(a);i<(int)(b);i++)
#include <atcoder/modint>
using mint = atcoder::modint998244353;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // input
    int N;
    cin >> N;
    vector<int> A(N);
    rep(i, 0, N) cin >> A[i];
    
    // 約数を列挙する
    const int L = 200'200;
    vector<vector<int>> table(L);
    rep(i, 1, L) {
        for (int j = i; j < L; j += i){
            table[j].push_back(i);
        }
    }
    
    // R を求める
    vector<mint> R(L), R_inv(L);
    {
        mint tmp = 1;
        rep(i, 1, L){
            R[i] = tmp;
            tmp *= 10;
            tmp += 1;
            R_inv[i] = R[i].inv();
        }
    }
    
    // C[i] = 1 -> A[j] が i の倍数となるような j が存在する
    vector<int> C(L);
    C[1] = 1;
    mint ans = 1;
    rep(i, 0, N){
        // 以前出たことない時だけ探索
        if (C[A[i]] == 0){
            int a = A[i];
            vector<int> p(table[a].size());
            rep(j, 0, table[a].size()) if (C[table[a][j]] == 0) p[j] = 1;
            for (int j = (int)table[a].size() - 1; j >= 0; j--){
                // 約数包除原理
                rep(k, j + 1, table[a].size()){
                    if (table[a][k] % table[a][j] == 0) p[j] -= p[k];
                }
                ans *= (p[j] < 0 ? R_inv[table[a][j]].pow(-p[j]) : R[table[a][j]].pow(p[j]));
            }
            for (auto x : table[a]) C[x] = 1;
        }
        cout << ans.val() << "\n";
    }
}

提出情報

提出日時
問題 C - Repunits
ユーザ potato167
言語 C++ 17 (gcc 12.2)
得点 900
コード長 1643 Byte
結果 AC
実行時間 228 ms
メモリ 27632 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 900 / 900
結果
AC × 3
AC × 30
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_n_small_00.txt, 01_n_small_01.txt, 01_n_small_02.txt, 01_n_small_03.txt, 01_n_small_04.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt, 02_random_14.txt, 03_hcn_00.txt, 03_hcn_01.txt, 03_hcn_02.txt, 03_hcn_03.txt, 03_hcn_04.txt, 04_max_00.txt, 05_min_00.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 82 ms 26760 KiB
00_sample_01.txt AC 81 ms 26844 KiB
00_sample_02.txt AC 82 ms 26760 KiB
01_n_small_00.txt AC 84 ms 26744 KiB
01_n_small_01.txt AC 82 ms 26828 KiB
01_n_small_02.txt AC 81 ms 26672 KiB
01_n_small_03.txt AC 84 ms 26700 KiB
01_n_small_04.txt AC 82 ms 26764 KiB
02_random_00.txt AC 165 ms 27352 KiB
02_random_01.txt AC 184 ms 27588 KiB
02_random_02.txt AC 162 ms 27328 KiB
02_random_03.txt AC 192 ms 27540 KiB
02_random_04.txt AC 195 ms 27464 KiB
02_random_05.txt AC 209 ms 27532 KiB
02_random_06.txt AC 185 ms 27592 KiB
02_random_07.txt AC 187 ms 27456 KiB
02_random_08.txt AC 158 ms 27296 KiB
02_random_09.txt AC 196 ms 27460 KiB
02_random_10.txt AC 194 ms 27600 KiB
02_random_11.txt AC 221 ms 27632 KiB
02_random_12.txt AC 222 ms 27524 KiB
02_random_13.txt AC 222 ms 27548 KiB
02_random_14.txt AC 228 ms 27560 KiB
03_hcn_00.txt AC 117 ms 27560 KiB
03_hcn_01.txt AC 119 ms 27632 KiB
03_hcn_02.txt AC 122 ms 27544 KiB
03_hcn_03.txt AC 123 ms 27560 KiB
03_hcn_04.txt AC 119 ms 27604 KiB
04_max_00.txt AC 101 ms 27624 KiB
05_min_00.txt AC 83 ms 26844 KiB