QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#612514#7679. Master of Both IVzhangbojuWA 130ms29068kbC++172.4kb2024-10-05 11:42:052024-10-05 11:42:07

Judging History

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

  • [2024-10-05 11:42:07]
  • 评测
  • 测评结果:WA
  • 用时:130ms
  • 内存:29068kb
  • [2024-10-05 11:42:05]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
constexpr int N = 2e5 + 5, mod = 1e9 + 7;
struct Base{
    int a[20];
    void init() {
        for (int i = 0; i < 20; i++)
            a[i] = 0;
    }
    void insert(int x) {
        for (int i = 19; i >= 0; i--) {
            if (!((x >> i) & 1)) {
                continue;
            }
            if (!a[i]) {
                a[i] = x;
                break;
            }
            x ^= a[i];
        }
    }
    int count() {
        int cnt = 0;
        for (int i = 0; i < 20; i++)
            if (a[i])
                cnt++;
        return cnt;
    }
};
int n;
int pw[N];
int a[N];
int cnt[N];
vector<int> d[N];
int fac[N], inv[N];
int qpow(int a, int k) {
    int res = 1;
    while (k) {
        if (k & 1) res = 1ll * res * a % mod;
        a = 1ll * a * a % mod;
        k >>= 1;
    }
    return res;
}
void init(int n) {
    pw[0] = 1;
    for (int i = 1; i <= n; i++)
        pw[i] = 2ll * pw[i - 1] % mod;
    fac[0] = 1;
    for (int i = 1; i <= n; i++)
        fac[i] = 1ll * fac[i - 1] * i % mod;
    inv[n] = qpow(fac[n], mod - 2);
    for (int i = n - 1; i >= 0; i--)
        inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
}
int C(int n, int m) {
    if (m < 0 || n < m) return 0;
    return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
}
void solve() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        cnt[a[i]]++;
    }
    for (int i = 1; i <= n; i++)
        for (int j = 2 * i; j <= n; j += i)
            d[j].push_back(i);
    Base alls;
    alls.init();
    for (int i = 1; i <= n; i++)
        alls.insert(a[i]);
    int ans = pw[n - alls.count()] - 1;
    for (int i = 1; i <= n; i++) {
        if (!cnt[i]) continue;
        Base B;
        B.init();
        int sum = 0;
        for (int x : d[i]) {
            if (cnt[x]) {
                B.insert(x);
                sum += cnt[x];
            }
        }
        int res = 0;
        for (int t = 1; t <= cnt[i]; t += 2)
            res = (res + C(cnt[i], t)) % mod;
        ans = (ans + 1ll * res * pw[sum - B.count()]) % mod;
        
    }
    printf("%d\n", ans);
}
void clear() {
    for (int i = 0; i <= n; i++)
        cnt[i] = 0, d[i].clear();
}
int main() {
    init(N - 1);
    int T;
    scanf("%d", &T);
    while (T--) {
        solve();
        clear();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 11984kb

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: 22ms
memory: 12452kb

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: 19ms
memory: 12076kb

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: 11604kb

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: 28ms
memory: 11404kb

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: 130ms
memory: 29068kb

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:

561461472

result:

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