QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#410913#7766. 栞thangthang100 ✓164ms4276kbC++202.3kb2024-05-14 17:01:242024-05-14 17:01:24

Judging History

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

  • [2024-05-14 17:01:24]
  • 评测
  • 测评结果:100
  • 用时:164ms
  • 内存:4276kb
  • [2024-05-14 17:01:24]
  • 提交

answer

// author : HuuHung
// 25.3.2024


#include <bits/stdc++.h>
#define ii pair <int, int>
#define F first
#define S second
#define ll long long
#define lb long double
#define pb push_back
#define vi vector <int>
#define vll vector <ll>
#define Bit(x, i) ((x) >> (i) & 1)
#define Mask(i) (1ll << (i))
#define All(v) (v).begin(), (v).end()

using namespace std;

void maxzi(auto &a, auto b){
    a = max(a, b);
}

void minzi(auto &a, auto b){
    a = min(a, b);
}

const int N = 2e5 + 5;
const int mod = 998244353;
const int LG = 20;

void add(auto &a, auto b){
    a += b;
    if (a >= mod) a -= mod;
    if (a < 0) a += mod;
}

int Pow(int a, int b){
    if (b == 0) return 1;
    if (b % 2) return 1ll * a * Pow(a, b - 1) % mod;
    int c = Pow(a, b / 2);
    return 1ll * c * c % mod;
}

// * end

void solve(){
    int n, z;
    cin >> n >> z;
    vi p(n + 3, 0);
    int la = 1e9;
    for (int i = 0; i < n; ++ i) cin >> p[i + 1];
    for (int i = 0; i < n; ++ i) if (i == n - 1 || p[i] > p[i + 1]){minzi(la, i + 1);};
    vi gt(n + 3);
    gt[0] = 1;
    for (int i = 1; i <= n; ++ i) gt[i] = 1ll * gt[i - 1] * i % mod;
    vector <vi> dp(n + 3);
    vi dm(n + 3);
    dm[1] = 1;
    for (int i = 2; i <= n; ++ i){
        dm[i] = gt[i];
        for (int j = 1; j < i; ++ j) add(dm[i], -(1ll * dm[i - j] * gt[j] % mod));
    }
    for (int i = 0; i <= n; ++ i) dp[i].resize(n + 2, 0);
    dp[0][0] = 1;
    for (int i = 1; i <= n; ++ i){
        for (int k = 1; k <= n; ++ k) if (dp[i - 1][k - 1]){
            int lm = n - (z - k);
            for (int j = i, fl = 1; j <= lm && fl; j ++, fl &= p[j] > p[j - 1]){
                if (p[i] > p[i - 1]) add(dp[j][k], 1ll * dp[i - 1][k - 1] * dm[j - i + 1] % mod);
                else if (j == lm && (j == i || p[i + 1] > p[i - 1])){
                    add(dp[j][k], 1ll * dp[i - 1][k - 1] * gt[j - i] % mod);
                }
            }
        }
    }
    int ans = 0;
    for (int i = z; i <= n; ++ i) add(ans, dp[n][i]);
    cout << ans;
}


int main(){
    //freopen("code.inp", "r", stdin);
    //freopen("code.out", "w", stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    while (t --) solve();

    return 0;
}







Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 0ms
memory: 3556kb

input:

6 1
1 2 3 4 5 6

output:

720

result:

ok 1 number(s): "720"

Test #2:

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

input:

6 3
1 2 5 3 4 6

output:

0

result:

ok 1 number(s): "0"

Test #3:

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

input:

6 3
1 2 4 3 6 5

output:

3

result:

ok 1 number(s): "3"

Test #4:

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

input:

6 5
1 2 3 5 4 6

output:

4

result:

ok 1 number(s): "4"

Test #5:

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

input:

6 5
1 2 3 5 4 6

output:

4

result:

ok 1 number(s): "4"

Test #6:

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

input:

6 4
1 3 2 4 6 5

output:

3

result:

ok 1 number(s): "3"

Test #7:

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

input:

6 5
1 3 2 5 4 6

output:

2

result:

ok 1 number(s): "2"

Test #8:

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

input:

6 3
1 2 3 6 5 4

output:

13

result:

ok 1 number(s): "13"

Test #9:

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

input:

6 4
1 2 5 4 3 6

output:

3

result:

ok 1 number(s): "3"

Test #10:

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

input:

6 3
1 2 5 4 3 6

output:

0

result:

ok 1 number(s): "0"

Subtask #2:

score: 20
Accepted

Dependency #1:

100%
Accepted

Test #11:

score: 20
Accepted
time: 0ms
memory: 3496kb

input:

9 9
1 2 3 4 5 6 7 8 9

output:

1

result:

ok 1 number(s): "1"

Test #12:

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

input:

9 3
1 2 3 4 5 6 9 7 8

output:

3447

result:

ok 1 number(s): "3447"

Test #13:

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

input:

9 7
1 3 2 4 6 5 7 8 9

output:

3

result:

ok 1 number(s): "3"

Test #14:

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

input:

9 5
1 2 3 4 5 6 7 9 8

output:

531

result:

ok 1 number(s): "531"

Test #15:

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

input:

9 9
1 4 3 2 5 6 7 8 9

output:

1

result:

ok 1 number(s): "1"

Test #16:

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

input:

9 2
1 2 3 4 5 6 7 9 8

output:

29093

result:

ok 1 number(s): "29093"

Test #17:

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

input:

9 4
1 2 3 4 5 6 7 9 8

output:

2109

result:

ok 1 number(s): "2109"

Test #18:

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

input:

9 8
1 2 3 5 4 7 6 8 9

output:

4

result:

ok 1 number(s): "4"

Test #19:

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

input:

9 7
1 2 3 4 5 7 6 9 8

output:

23

result:

ok 1 number(s): "23"

Test #20:

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

input:

9 7
1 2 3 4 5 7 6 9 8

output:

23

result:

ok 1 number(s): "23"

Subtask #3:

score: 30
Accepted

Test #21:

score: 30
Accepted
time: 31ms
memory: 4140kb

input:

500 369
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

151242732

result:

ok 1 number(s): "151242732"

Test #22:

score: 0
Accepted
time: 82ms
memory: 4108kb

input:

500 261
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

175105582

result:

ok 1 number(s): "175105582"

Test #23:

score: 0
Accepted
time: 156ms
memory: 4164kb

input:

500 79
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1...

output:

328555836

result:

ok 1 number(s): "328555836"

Test #24:

score: 0
Accepted
time: 59ms
memory: 4272kb

input:

500 306
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

738246233

result:

ok 1 number(s): "738246233"

Test #25:

score: 0
Accepted
time: 66ms
memory: 4096kb

input:

500 291
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

90157368

result:

ok 1 number(s): "90157368"

Test #26:

score: 0
Accepted
time: 78ms
memory: 4096kb

input:

500 268
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

582110163

result:

ok 1 number(s): "582110163"

Test #27:

score: 0
Accepted
time: 61ms
memory: 4256kb

input:

500 295
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

551109392

result:

ok 1 number(s): "551109392"

Test #28:

score: 0
Accepted
time: 136ms
memory: 4160kb

input:

500 137
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

709320534

result:

ok 1 number(s): "709320534"

Test #29:

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

input:

500 66
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1...

output:

735053639

result:

ok 1 number(s): "735053639"

Test #30:

score: 0
Accepted
time: 96ms
memory: 4160kb

input:

500 233
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

676167049

result:

ok 1 number(s): "676167049"

Subtask #4:

score: 40
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Test #31:

score: 40
Accepted
time: 113ms
memory: 4276kb

input:

500 198
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

830163792

result:

ok 1 number(s): "830163792"

Test #32:

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

input:

500 432
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 80 78 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

409343845

result:

ok 1 number(s): "409343845"

Test #33:

score: 0
Accepted
time: 38ms
memory: 4076kb

input:

500 265
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

194041644

result:

ok 1 number(s): "194041644"

Test #34:

score: 0
Accepted
time: 99ms
memory: 4168kb

input:

500 173
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

526227080

result:

ok 1 number(s): "526227080"

Test #35:

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

input:

500 483
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

614441401

result:

ok 1 number(s): "614441401"

Test #36:

score: 0
Accepted
time: 39ms
memory: 4156kb

input:

500 243
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

284882224

result:

ok 1 number(s): "284882224"

Test #37:

score: 0
Accepted
time: 26ms
memory: 4092kb

input:

500 282
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

308933889

result:

ok 1 number(s): "308933889"

Test #38:

score: 0
Accepted
time: 25ms
memory: 4076kb

input:

500 231
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

131213230

result:

ok 1 number(s): "131213230"

Test #39:

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

input:

500 415
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 100 99 ...

output:

590026968

result:

ok 1 number(s): "590026968"

Test #40:

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

input:

500 344
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...

output:

124432123

result:

ok 1 number(s): "124432123"