QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#127589#6637. Perfect StringsEthan_xuAC ✓198ms237936kbC++201.4kb2023-07-19 20:04:142023-07-19 20:04:20

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-19 20:04:20]
  • 评测
  • 测评结果:AC
  • 用时:198ms
  • 内存:237936kb
  • [2023-07-19 20:04:14]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
ll qpow(ll x, ll y) {
    ll res = 1;
    while (y) {
        if (y & 1) res = res * x % mod;
        x = x * x % mod;
        y >>= 1;
    }
    return res;
}

const int N = 1e7 + 5;
ll fact[N], invf[N], f[N];

int main() {
    #ifdef _DEBUG
        freopen("data.txt", "r", stdin);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin >> T;
    while(T--) {
        ll n, c;
        cin >> n >> c;
        if (c == 1) {
            cout << "1\n";
            continue;
        }
        fact[0] = 1;
        for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * i % mod, f[i] = 0;
        invf[n] = qpow(fact[n], mod - 2);
        for (int i = n - 1; i >= 0; i--) invf[i] = invf[i + 1] * (i + 1) % mod;
        f[0] = (2 - c + mod) % mod;
        ll now = c;
        ll top = 1;
        ll tmp = c * c % mod;
        ll mul = 1;
        for(int i = 0; i <= n; i++) {
            f[i] += now * top % mod * invf[i] % mod;
            top *= ((mod + 1) / 2 - i + mod) % mod;
            top %= mod;
            now = now * (mod + 4 - 4 * c % mod) % mod;
        }
        ll ans = 0;
        for (int i = 0; i <= n; i++) {
            ans = (ans + f[n - i] * mul % mod) % mod;
            mul = mul * tmp % mod;
        }
        cout << ans * qpow(2, mod - 2) % mod << "\n";
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

2
3 1
2 2

output:

1
6

result:

ok 2 number(s): "1 6"

Test #2:

score: 0
Accepted
time: 34ms
memory: 7716kb

input:

100000
1 1
4 1
5 5
3 5
1 2
5 3
1 1
3 3
5 2
2 1
4 1
5 5
2 3
4 1
3 3
2 5
3 2
4 3
4 4
3 5
3 1
5 2
2 2
4 2
5 4
1 2
3 1
4 5
2 5
5 3
1 5
5 2
3 2
5 2
4 1
1 3
3 2
4 5
2 1
4 1
2 2
1 1
3 5
4 5
2 3
3 5
2 5
2 4
5 4
2 3
1 1
2 1
4 4
1 5
5 4
1 3
5 4
4 5
1 3
1 1
3 3
2 4
2 4
2 1
5 5
1 3
2 3
4 1
4 3
2 4
2 4
4 2
1 1
1...

output:

1
1
71445
485
2
3543
1
87
252
1
1
71445
15
1
87
45
20
543
2092
485
1
252
6
70
19864
2
1
5725
45
3543
5
252
20
252
1
3
20
5725
1
1
6
1
485
5725
15
485
45
28
19864
15
1
1
2092
5
19864
3
19864
5725
3
1
87
28
28
1
71445
3
15
1
543
28
28
70
1
1
71445
15
2092
3
1
2
15
87
2092
19864
71445
6
252
2092
252
15...

result:

ok 100000 numbers

Test #3:

score: 0
Accepted
time: 122ms
memory: 7512kb

input:

100000
94 7867320
84 1294950
35 8570570
72 7050952
23 3907221
95 7482398
58 2363048
44 2234552
50 8809524
37 1061961
19 884367
38 3261675
59 1563189
61 7603994
83 3131714
19 6207284
64 5662457
2 6845951
84 4688192
13 7552675
38 3119650
84 6311084
10 5040332
53 5981961
46 7308176
43 679952
30 2922213...

output:

89775996
781446171
477730749
425095995
683480274
139962614
676040688
83128356
609223622
595772607
273248526
319532567
917638183
692265001
864029162
41269371
365591107
82686713
397805948
799200818
123574040
576607518
6430981
978266206
446712393
201799413
709622262
325465125
319418065
850111422
513285...

result:

ok 100000 numbers

Test #4:

score: 0
Accepted
time: 192ms
memory: 7556kb

input:

18170
339 1623650
128 3200275
965 1829351
997 1547816
435 9138202
974 1806376
560 1011936
345 3813921
938 2229395
994 2411734
163 6603389
837 1133885
494 1068385
197 9254017
617 9553650
136 5850880
376 8616282
456 5759693
302 515509
293 2633903
703 7929747
205 5091361
303 5968505
740 872272
246 4106...

output:

461108227
93969714
967535558
286996770
439955818
513651814
367718117
70089455
537505709
989455211
600861203
892954232
899899624
825588888
536671357
118059202
325888233
146830823
953101687
974677182
364272875
482192182
565890497
657497852
297995102
797194699
322320804
744121644
399550079
576261681
42...

result:

ok 18170 numbers

Test #5:

score: 0
Accepted
time: 182ms
memory: 12392kb

input:

176
15130 5219515
54554 814733
69310 3225417
43446 3402232
76425 3330887
34830 2231162
47132 342177
79713 4699528
48406 1562867
21339 5382282
34946 1991698
15555 4141661
52222 2028547
46168 5336018
52551 3781122
23469 1309869
86778 5167485
91984 6969638
28587 3283991
61602 8233067
59908 7918245
6735...

output:

819064610
746619602
481292930
837614851
505712843
251469513
848664626
555419188
788141020
910120658
97942397
995461053
434307672
778837756
976339209
531426099
871529896
875150459
25421918
983527791
281476053
75045944
504006808
866398210
213458087
196306823
900182966
590704432
289412620
28788603
7631...

result:

ok 176 numbers

Test #6:

score: 0
Accepted
time: 161ms
memory: 31528kb

input:

13
931768 3882995
670768 6406509
941049 8590729
817046 5807892
779381 8981570
680279 9990918
396926 9134499
722228 9178753
561021 6110788
686746 6740122
458271 3748820
854144 5848248
548582 8566164

output:

268755962
578943126
92794411
444457165
169780513
804005790
351652199
721238566
102253686
200247655
716047991
465958249
717148868

result:

ok 13 numbers

Test #7:

score: 0
Accepted
time: 164ms
memory: 52560kb

input:

5
1921421 2863210
1611550 9114363
1800313 2824695
1973050 2501730
1312507 7997456

output:

398101698
182608998
453457939
585926383
479930575

result:

ok 5 number(s): "398101698 182608998 453457939 585926383 479930575"

Test #8:

score: 0
Accepted
time: 187ms
memory: 237920kb

input:

1
10000000 5350652

output:

694744897

result:

ok 1 number(s): "694744897"

Test #9:

score: 0
Accepted
time: 1ms
memory: 3520kb

input:

1
10000000 1

output:

1

result:

ok 1 number(s): "1"

Test #10:

score: 0
Accepted
time: 188ms
memory: 234056kb

input:

1
9587024 1628294

output:

983037582

result:

ok 1 number(s): "983037582"

Test #11:

score: 0
Accepted
time: 189ms
memory: 237800kb

input:

1
9994540 7861359

output:

145678106

result:

ok 1 number(s): "145678106"

Test #12:

score: 0
Accepted
time: 198ms
memory: 237936kb

input:

1
9993434 8756421

output:

980562657

result:

ok 1 number(s): "980562657"

Test #13:

score: 0
Accepted
time: 193ms
memory: 237920kb

input:

1
9999982 9427845

output:

977921308

result:

ok 1 number(s): "977921308"