QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#72787#4812. Counting SequenceMacesutedAC ✓4086ms17788kbC++141.6kb2023-01-19 10:53:512023-01-19 10:53:52

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-19 10:53:52]
  • 评测
  • 测评结果:AC
  • 用时:4086ms
  • 内存:17788kb
  • [2023-01-19 10:53:51]
  • 提交

answer

/**
 * @file 4812.cpp
 * @author Macesuted ([email protected])
 * @date 2023-01-19
 *
 * @copyright Copyright (c) 2023
 *
 */

#include <bits/stdc++.h>
using namespace std;

#ifndef LOCAL
#define endl '\n'
#endif

bool mem1;

#define maxn 300005
#define maxS 805
#define mod 998244353

int f[2][maxn << 1], g[maxS << 1][maxS << 1];

void solve(void) {
    int n;
    int64_t c, ans = 0;
    cin >> n >> c;
    int S = sqrt(2 * n) + 5;
    f[1][0 + maxn] = 1;
    if (S <= n) ans = 1;
    for (int i = 2; i * S <= 2 * n; i++) {
        bool t = i & 1;
        for (int j = max(-i * (i + 1) / 2, -i * S + 1); j <= i * (i + 1) / 2 && i * S + j <= n; j++) {
            f[t][j + maxn] = (f[!t][j - i + 1 + maxn] + f[!t][j + i - 1 + maxn] * c) % mod;
            if ((n - j) % i == 0) ans = (ans + f[t][j + maxn]) % mod;
        }
    }
    int T = 2 * S + 5;
    for (int i = 1; i <= n; i++) {
        int t = i % T;
        for (int j = 1; j <= min(i, T); j++) {
            g[t][j] = g[(t + T - j) % T][j + 1] * c % mod;
            if (j > 1) g[t][j] = (g[t][j] + g[(t + T - j) % T][j - 1]) % mod;
        }
        if (i < S) g[t][i] = (g[t][i] + 1) % mod;
    }
    for (int j = 1; j <= T; j++) ans = (ans + g[n % T][j]) % mod;
    cout << ans << endl;
    return;
}

bool mem2;

int main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
#ifdef LOCAL
    cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
#endif

    int _ = 1;
    while (_--) solve();

#ifdef LOCAL
    cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
#endif
    return 0;
}

詳細信息

Test #1:

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

input:

5 3

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 2ms
memory: 3340kb

input:

1 0

output:

1

result:

ok 1 number(s): "1"

Test #3:

score: 0
Accepted
time: 0ms
memory: 8176kb

input:

2022 39

output:

273239559

result:

ok 1 number(s): "273239559"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3316kb

input:

1 998244352

output:

1

result:

ok 1 number(s): "1"

Test #5:

score: 0
Accepted
time: 2ms
memory: 3372kb

input:

1 12345678

output:

1

result:

ok 1 number(s): "1"

Test #6:

score: 0
Accepted
time: 3ms
memory: 7580kb

input:

20 998998

output:

643731701

result:

ok 1 number(s): "643731701"

Test #7:

score: 0
Accepted
time: 2ms
memory: 5548kb

input:

23 123

output:

947753998

result:

ok 1 number(s): "947753998"

Test #8:

score: 0
Accepted
time: 2ms
memory: 7672kb

input:

50 5555

output:

745339864

result:

ok 1 number(s): "745339864"

Test #9:

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

input:

60 6666

output:

690992218

result:

ok 1 number(s): "690992218"

Test #10:

score: 0
Accepted
time: 2ms
memory: 7632kb

input:

100 50

output:

169678588

result:

ok 1 number(s): "169678588"

Test #11:

score: 0
Accepted
time: 2ms
memory: 5736kb

input:

500 88888

output:

216149701

result:

ok 1 number(s): "216149701"

Test #12:

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

input:

1000 213456

output:

270989457

result:

ok 1 number(s): "270989457"

Test #13:

score: 0
Accepted
time: 5ms
memory: 8140kb

input:

2000 119988

output:

756425375

result:

ok 1 number(s): "756425375"

Test #14:

score: 0
Accepted
time: 7ms
memory: 9776kb

input:

3000 998244352

output:

71841227

result:

ok 1 number(s): "71841227"

Test #15:

score: 0
Accepted
time: 3ms
memory: 8056kb

input:

3000 555555555

output:

79880116

result:

ok 1 number(s): "79880116"

Test #16:

score: 0
Accepted
time: 5ms
memory: 8400kb

input:

4321 1234

output:

949603993

result:

ok 1 number(s): "949603993"

Test #17:

score: 0
Accepted
time: 8ms
memory: 8476kb

input:

5000 0

output:

5

result:

ok 1 number(s): "5"

Test #18:

score: 0
Accepted
time: 11ms
memory: 9712kb

input:

5000 88888777

output:

833064960

result:

ok 1 number(s): "833064960"

Test #19:

score: 0
Accepted
time: 8ms
memory: 8396kb

input:

5000 35557777

output:

696388498

result:

ok 1 number(s): "696388498"

Test #20:

score: 0
Accepted
time: 21ms
memory: 9664kb

input:

10000 123456

output:

434296902

result:

ok 1 number(s): "434296902"

Test #21:

score: 0
Accepted
time: 71ms
memory: 10948kb

input:

20000 555555

output:

34806915

result:

ok 1 number(s): "34806915"

Test #22:

score: 0
Accepted
time: 129ms
memory: 11328kb

input:

30000 777888999

output:

58443551

result:

ok 1 number(s): "58443551"

Test #23:

score: 0
Accepted
time: 265ms
memory: 12932kb

input:

50000 2

output:

90102905

result:

ok 1 number(s): "90102905"

Test #24:

score: 0
Accepted
time: 431ms
memory: 12952kb

input:

70000 77998866

output:

202638568

result:

ok 1 number(s): "202638568"

Test #25:

score: 0
Accepted
time: 735ms
memory: 15008kb

input:

100000 998244352

output:

360520717

result:

ok 1 number(s): "360520717"

Test #26:

score: 0
Accepted
time: 723ms
memory: 13804kb

input:

100000 555555555

output:

613886009

result:

ok 1 number(s): "613886009"

Test #27:

score: 0
Accepted
time: 1351ms
memory: 13280kb

input:

150000 233333

output:

381065878

result:

ok 1 number(s): "381065878"

Test #28:

score: 0
Accepted
time: 1382ms
memory: 13444kb

input:

150000 20050117

output:

269891864

result:

ok 1 number(s): "269891864"

Test #29:

score: 0
Accepted
time: 2137ms
memory: 17168kb

input:

200000 114514

output:

262861613

result:

ok 1 number(s): "262861613"

Test #30:

score: 0
Accepted
time: 2110ms
memory: 15684kb

input:

200000 1919810

output:

77872388

result:

ok 1 number(s): "77872388"

Test #31:

score: 0
Accepted
time: 3877ms
memory: 16684kb

input:

300000 0

output:

12

result:

ok 1 number(s): "12"

Test #32:

score: 0
Accepted
time: 3891ms
memory: 16664kb

input:

300000 1

output:

298803948

result:

ok 1 number(s): "298803948"

Test #33:

score: 0
Accepted
time: 3892ms
memory: 17192kb

input:

300000 2

output:

106751203

result:

ok 1 number(s): "106751203"

Test #34:

score: 0
Accepted
time: 3793ms
memory: 17712kb

input:

300000 1234

output:

427045479

result:

ok 1 number(s): "427045479"

Test #35:

score: 0
Accepted
time: 3935ms
memory: 17224kb

input:

300000 2345

output:

441593553

result:

ok 1 number(s): "441593553"

Test #36:

score: 0
Accepted
time: 4052ms
memory: 17584kb

input:

300000 20041115

output:

580367993

result:

ok 1 number(s): "580367993"

Test #37:

score: 0
Accepted
time: 4086ms
memory: 17560kb

input:

300000 20050117

output:

579859619

result:

ok 1 number(s): "579859619"

Test #38:

score: 0
Accepted
time: 3933ms
memory: 16600kb

input:

300000 22223333

output:

596066085

result:

ok 1 number(s): "596066085"

Test #39:

score: 0
Accepted
time: 3894ms
memory: 17380kb

input:

300000 175846372

output:

660364393

result:

ok 1 number(s): "660364393"

Test #40:

score: 0
Accepted
time: 3810ms
memory: 17788kb

input:

299999 9999999

output:

954865020

result:

ok 1 number(s): "954865020"

Test #41:

score: 0
Accepted
time: 3894ms
memory: 17520kb

input:

299998 55556666

output:

904862432

result:

ok 1 number(s): "904862432"

Test #42:

score: 0
Accepted
time: 2004ms
memory: 17200kb

input:

190733 31756136

output:

880544587

result:

ok 1 number(s): "880544587"

Test #43:

score: 0
Accepted
time: 2072ms
memory: 15536kb

input:

198497 463488298

output:

185220207

result:

ok 1 number(s): "185220207"

Test #44:

score: 0
Accepted
time: 3879ms
memory: 16664kb

input:

299997 0

output:

16

result:

ok 1 number(s): "16"

Test #45:

score: 0
Accepted
time: 1591ms
memory: 15536kb

input:

168168 296157813

output:

798716760

result:

ok 1 number(s): "798716760"

Test #46:

score: 0
Accepted
time: 915ms
memory: 15668kb

input:

114514 1919810

output:

783513290

result:

ok 1 number(s): "783513290"