QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#487258#7679. Master of Both IVyaoyWA 77ms45256kbC++205.8kb2024-07-22 19:22:302024-07-22 19:22:31

Judging History

你现在查看的是最新测评结果

  • [2024-07-22 19:22:31]
  • 评测
  • 测评结果:WA
  • 用时:77ms
  • 内存:45256kb
  • [2024-07-22 19:22:30]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;

template<class T>
constexpr T power(T a, i64 b) {
    T res {1};
    for (; b; b /= 2, a *= a) {
        if (b % 2) {
            res *= a;
        }
    }
    return res;
}
  
constexpr i64 mul(i64 a, i64 b, i64 p) {
    i64 res = a * b - i64(1.L * a * b / p) * p;
    res %= p;
    if (res < 0) {
        res += p;
    }
    return res;
}
  
template<i64 P>
struct MInt {
    i64 x;
    constexpr MInt() : x {0} {}
    constexpr MInt(i64 x) : x {norm(x % getMod())} {}
     
    static i64 Mod;
    constexpr static i64 getMod() {
        if (P > 0) {
            return P;
        } else {
            return Mod;
        }
    }
    static void setMod(i64 Mod_) {
        Mod = Mod_;
    }
    constexpr i64 norm(i64 x) const {
        if (x < 0) {
            x += getMod();
        }
        if (x >= getMod()) {
            x -= getMod();
        }
        return x;
    }
    constexpr i64 val() const {
        return x;
    }
    constexpr MInt operator-() const {
        MInt res;
        res.x = norm(getMod() - x);
        return res;
    }
    constexpr MInt inv() const {
        return power(*this, getMod() - 2);
    }
    constexpr MInt &operator*=(MInt rhs) & {
        if (getMod() < (1ULL << 31)) {
            x = x * rhs.x % int(getMod());
        } else {
            x = mul(x, rhs.x, getMod());
        }
        return *this;
    }
    constexpr MInt &operator+=(MInt rhs) & {
        x = norm(x + rhs.x);
        return *this;
    }
    constexpr MInt &operator-=(MInt rhs) & {
        x = norm(x - rhs.x);
        return *this;
    }
    constexpr MInt &operator/=(MInt rhs) & {
        return *this *= rhs.inv();
    }
    friend constexpr MInt operator*(MInt lhs, MInt rhs) {
        MInt res = lhs;
        res *= rhs;
        return res;
    }
    friend constexpr MInt operator+(MInt lhs, MInt rhs) {
        MInt res = lhs;
        res += rhs;
        return res;
    }
    friend constexpr MInt operator-(MInt lhs, MInt rhs) {
        MInt res = lhs;
        res -= rhs;
        return res;
    }
    friend constexpr MInt operator/(MInt lhs, MInt rhs) {
        MInt res = lhs;
        res /= rhs;
        return res;
    }
    friend constexpr std::istream &operator>>(std::istream &is, MInt &a) {
        i64 v;
        is >> v;
        a = MInt(v);
        return is;
    }
    friend constexpr std::ostream &operator<<(std::ostream &os, const MInt &a) {
        return os << a.val();
    }
    friend constexpr bool operator==(MInt lhs, MInt rhs) {
        return lhs.val() == rhs.val();
    }
    friend constexpr bool operator!=(MInt lhs, MInt rhs) {
        return lhs.val() != rhs.val();
    }
    friend constexpr bool operator<(MInt lhs, MInt rhs) {
        return lhs.val() < rhs.val();
    }
};
  
template<>
i64 MInt<0>::Mod = 998244353;
  
constexpr int P = 998244353;
using Mint = MInt<P>;

const int B = 16 + 1;
struct LinearBasis {
    int ex, m;
    std::vector<i64> bit, b;
    LinearBasis() {
        std::vector<i64> t;
        init(t);
    }
    template<class T>
    LinearBasis(std::vector<T> &a) {
        init(a);
    }
    template<class T>
    void init(std::vector<T> &a) {
        this->ex = 0;
        bit.assign(B, 0);
        for (auto &x : a) {
            insert(x);
        }
        // build();
    }
    void build() {
        b.clear();
        for (int i = 0; i < B; i++) {
            if (!bit[i]) {
                continue;
            }
            b.emplace_back(bit[i]);
        }
        this->m = b.size();
    }

    bool insert(i64 x) {
        for (int i = B - 1; i >= 0; i--) {
            if (x >> i & 1) {
                if (!bit[i]) {
                    bit[i] = x;
                    // build();
                    return true;
                } else {
                    x ^= bit[i];
                }
            }
        }
        this->ex++;
        return false;
    }
    i64 queryMin(i64 x) {
        for (int i = B - 1; i >= 0; i--) {
            x = std::min(x, bit[i] ^ x);
        }
        return x;
    }
    i64 queryMax(i64 x) {
        for (int i = B - 1; i >= 0; i--) {
            x = std::max(x, bit[i] ^ x);
        }
        return x;
    }
    i64 kth(i64 k) { // the kth smallest element in set
        // multiset: k >> this->ex
        if (this->ex > 0) {
            k--;
        }
        if (k > (1LL << m) - 1) {
            return -1;
        }
        i64 x = 0;
        for (int i = m - 1; i >= 0; i--) {
            if (k >> i & 1) {
                x = std::max(x, x ^ b[i]);
            } else {
                x = std::min(x, x ^ b[i]);
            }
        }
        return x;
    }
};

const int N = 2E5 + 1;
Mint pw[N];

void solve() {
    int n;
    std::cin >> n;

    std::vector<int> a(n);
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }

    LinearBasis L0(a);
    std::vector<int> cnt(n + 1);
    for (int i = 0; i < n; i++) {
        cnt[a[i]]++;
    }
    Mint ans = pw[L0.ex] - 1;

    std::sort(a.begin(), a.end());
    a.erase(std::unique(a.begin(), a.end()), a.end());
    const int m = a.size();
    const int mx = a.back();

    std::vector<LinearBasis> L(mx + 1);
    for (auto &x : a) {
        for (int j = x; j <= mx; j += x) {
            L[j].insert(x);
            L[j].ex += (cnt[x] - 1);
        }
    }

    for (auto &x : a) {
        ans += pw[L[x].ex];
    }
    std::cout << ans << "\n";
}

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

    pw[0] = 1;
    for (int i = 1; i < N; i++) {
        pw[i] = pw[i - 1] * 2;
    }

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}
 

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 5240kb

input:

2
3
1 2 3
5
3 3 5 1 1

output:

4
11

result:

ok 2 number(s): "4 11"

Test #2:

score: 0
Accepted
time: 28ms
memory: 5444kb

input:

40000
5
4 2 5 5 5
5
5 5 5 5 4
5
1 4 4 4 2
5
2 5 2 4 1
5
3 2 4 5 3
5
1 5 5 3 4
5
5 5 5 4 3
5
4 3 3 5 1
5
4 5 5 2 1
5
2 5 4 2 5
5
3 4 3 4 3
5
5 3 5 1 3
5
5 1 2 4 4
5
4 2 5 1 5
5
5 4 2 5 4
5
5 2 5 2 4
5
1 4 5 4 5
5
4 2 3 2 3
5
1 4 1 3 5
5
1 1 2 1 5
5
5 2 5 1 3
5
3 1 2 5 3
5
5 5 1 1 5
5
2 2 2 1 3
5
3 1 ...

output:

9
16
9
9
8
8
9
8
8
9
13
8
8
8
8
9
12
9
11
15
8
8
17
13
8
11
8
8
8
13
15
9
9
8
8
8
11
9
11
13
15
9
17
9
8
8
8
13
11
8
9
11
8
8
11
15
9
8
9
8
8
15
11
8
17
9
15
8
8
8
12
9
9
11
8
13
9
8
15
8
8
9
8
8
8
15
8
11
13
8
9
11
8
19
11
13
19
17
13
15
8
8
8
9
8
9
13
15
17
9
9
17
9
11
9
9
11
9
9
11
8
9
9
13
15
11...

result:

ok 40000 numbers

Test #3:

score: 0
Accepted
time: 29ms
memory: 5448kb

input:

20000
10
1 3 6 8 3 1 10 7 2 3
10
8 2 8 9 10 5 8 4 8 3
10
2 2 10 1 6 4 4 3 4 7
10
6 5 10 7 8 7 3 1 6 6
10
3 2 3 7 8 4 9 8 8 7
10
9 9 6 4 9 3 9 10 5 9
10
10 8 9 10 10 4 5 1 4 3
10
2 10 4 5 8 10 2 2 7 2
10
2 6 4 10 1 1 1 1 2 3
10
1 10 2 8 1 5 9 4 3 1
10
8 1 8 1 9 5 6 7 2 9
10
1 6 7 4 8 8 7 3 5 7
10
10 ...

output:

97
77
82
74
75
84
75
105
159
95
81
74
78
75
73
73
83
93
90
84
79
77
73
89
77
74
81
79
80
207
83
77
83
78
87
85
84
97
75
80
117
75
113
74
75
95
77
83
86
77
99
73
77
83
91
96
77
80
77
76
84
81
73
95
83
74
75
81
77
79
75
78
78
81
97
77
85
73
92
83
73
80
73
81
74
73
142
83
99
78
91
77
76
81
77
74
78
76
...

result:

ok 20000 numbers

Test #4:

score: 0
Accepted
time: 29ms
memory: 5160kb

input:

10000
20
5 12 4 16 11 20 3 1 3 13 19 16 3 17 15 9 10 18 19 13
20
4 17 14 3 3 10 6 17 16 17 16 8 1 15 13 12 8 12 10 9
20
18 11 5 11 5 5 9 3 17 10 6 8 5 10 11 15 19 9 10 11
20
7 7 12 13 20 9 14 17 1 10 13 20 10 19 3 12 1 8 8 3
20
13 20 17 12 6 1 16 5 3 2 18 7 2 7 20 1 12 4 7 1
20
15 6 13 1 10 5 13 3 4...

output:

32801
32799
32832
32817
32955
65621
32919
32865
32843
32798
32792
32843
32796
32823
32803
32807
32797
32859
32806
32799
32806
32813
32893
32798
32798
32799
32832
32792
32825
32817
32867
32795
32806
32796
32794
32943
32795
32791
65732
32842
32841
32841
32806
32804
32852
32795
32867
32798
32841
32823
...

result:

ok 10000 numbers

Test #5:

score: 0
Accepted
time: 30ms
memory: 5416kb

input:

16666
12
11 11 9 7 10 9 7 5 4 8 3 3
12
8 6 8 9 3 10 10 9 1 4 5 10
12
2 1 4 1 2 8 7 11 8 7 5 9
12
4 6 11 11 9 11 3 10 4 9 10 6
12
6 2 11 4 10 9 5 9 5 8 9 2
12
9 10 5 2 2 2 3 6 4 11 8 8
12
7 6 5 4 1 11 1 6 11 9 9 3
12
4 5 11 12 1 3 3 9 4 4 1 11
12
6 9 9 11 4 7 10 5 6 9 8 1
12
7 1 2 1 6 11 8 5 8 8 2 6
...

output:

269
268
283
268
274
283
277
295
268
291
269
855
275
287
344
299
291
277
329
274
281
276
267
268
268
270
338
275
297
315
273
307
303
302
269
279
272
278
281
302
270
301
295
268
303
279
303
267
279
297
326
272
270
287
287
277
273
276
296
307
274
271
281
278
277
311
273
277
275
315
272
272
293
278
285
...

result:

ok 16666 numbers

Test #6:

score: -100
Wrong Answer
time: 77ms
memory: 45256kb

input:

1
199999
31326 93089 143392 198151 77233 59844 54715 190000 165927 171095 37063 5018 63088 44405 71037 25580 164377 88095 161549 177275 27730 70339 43759 118378 142428 109706 184253 60233 148241 30394 137958 92664 199171 166535 103239 164430 53636 191124 72007 81005 84139 162416 72120 123920 67659 1...

output:

606157033

result:

wrong answer 1st numbers differ - expected: '201346582', found: '606157033'