Submission #70852314


Source Code Expand

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

constexpr long long mod = 1e9 + 7;

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

    int n, m;
    cin >> n >> m;
    vector<pair<int, int>> in1, in2;
    for(int i = 0; i < m; i++){
        int a, b;
        cin >> a >> b;
        a--;
        b--;
        if(a < b){
            in1.emplace_back(a, b - 1);
        }
        else{
            in2.emplace_back(b, a - 1);
        }
    }

    auto sub = [&](vector<pair<int, int>> &in){
        multiset<int> st;
        st.insert(-1);
        int sz = in.size();
        vector<int> res(n - 1);
        vector<vector<int>> add(n - 1), era(n - 1);
        for(auto [l, r]: in){
            add[l].emplace_back(l);
            era[r].emplace_back(l);
        }
        for(int i = 0; i < n - 1; i++){
            for(int ad: add[i]){
                st.insert(ad);
            }
            auto itr = st.end();
            res[i] = *(--itr);
            for(int er: era[i]){
                st.erase(st.find(er));
            }
        }
        return res;
    };
    vector<int> mxl1 = sub(in1), mxl2 = sub(in2);

    vector<vector<long long>> dp(26, vector<long long>(n, 0));
    vector<vector<long long>> dpsum(26, vector<long long>(n + 1, 0));
    for(int i = 0; i < 26; i++){
        dp[i][0] = 1;
        dpsum[i][1] = 1;
    }
    for(int i = 0; i < n - 1; i++){
        int left;
        long long s;

        // < にしたい
        left = mxl1[i] + 1;
        s = 0;
        for(int j = 0; j < 26; j++){
            dp[j][i + 1] += s;
            s += dpsum[j][i + 1] - dpsum[j][left];
            s %= mod;
        }

        // > にしたい
        left = mxl2[i] + 1;
        s = 0;
        for(int j = 25; j >= 0; j--){
            dp[j][i + 1] += s;
            s += dpsum[j][i + 1] - dpsum[j][left];
            s %= mod;
        }

        for(int j = 0; j < 26; j++){
            dpsum[j][i + 2] = dpsum[j][i + 1] + dp[j][i + 1];
            dpsum[j][i + 2] %= mod;
        }
    }

    long long ans = 0;
    for(int i = 0; i < 26; i++){
        for(int j = 0; j < n; j++){
            ans += dp[i][j];
            ans %= mod;
        }
    }

    if(ans < 0) ans += mod;
    cout << ans << endl;
}

/*
dif[0], dif[1], ..., dif[n - 2] を決める
dif[i] \in {>, =, <} : それぞれ s[i], s[i + 1] の関係
*/

/*
dp[最後の = 以外が > か < か][その場所][今の文字] とする dp をしたい

in1 の区間 [l, r] について
dif[l, r] について < は > より後に出てくる

in2 の区間 [l, r] について
dif[l, r] について > は < より後に出てくる

dif[p] = < としたい
in1 かつ l <= p <= r なる [l, r] について l の max を取る
[その場所] が l 未満 -> 遷移ダメ
それ以外 ok
l <= p' < p で dif[p'] = > : 当然 ok
               dif[p'] = < : p' に < を置いてるので ok

dif[p] = > としたい
in2 かつ l <= p <= r なる [l, r] について l の max を取る
[その場所] が l 未満 -> 遷移ダメ
それ以外 ok
l <= p' < p で dif[p'] = > : p' に > を置いてるので ok
               dif[p'] = < : 当然 ok

結局 dp[最後に = でなかった場所][今の文字] として良さそう

各 p について in1 かつ l <= p <= r なる [l, r] について l の max を取りたい
multiset でできそう
*/

Submission Info

Submission Time
Task C - スペルミス (Misspelling)
User Mitsubachi
Language C++ 20 (gcc 12.2)
Score 100
Code Size 3483 Byte
Status AC
Exec Time 699 ms
Memory 238924 KiB

Compile Error

Main.cpp: In lambda function:
Main.cpp:29:13: warning: unused variable ‘sz’ [-Wunused-variable]
   29 |         int sz = in.size();
      |             ^~

Judge Result

Set Name Subtask 1 Subtask 2 Subtask 3 Subtask 4 Subtask 5
Score / Max Score 8 / 8 20 / 20 29 / 29 32 / 32 11 / 11
Status
AC × 14
AC × 25
AC × 13
AC × 39
AC × 57
Set Name Test Cases
Subtask 1 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-08.txt
Subtask 2 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-07.txt, 03-08.txt
Subtask 3 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, sample-01.txt, sample-04.txt, sample-05.txt, 01-07.txt
Subtask 4 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-06.txt, 03-07.txt, 03-08.txt
Subtask 5 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 05-09.txt, 05-10.txt, 05-11.txt, 05-12.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt
Case Name Status Exec Time Memory
01-01.txt AC 1 ms 3636 KiB
01-02.txt AC 1 ms 3436 KiB
01-03.txt AC 1 ms 3404 KiB
01-04.txt AC 1 ms 3504 KiB
01-05.txt AC 1 ms 3512 KiB
01-06.txt AC 1 ms 3412 KiB
01-07.txt AC 1 ms 3428 KiB
01-08.txt AC 1 ms 3364 KiB
02-01.txt AC 1 ms 3592 KiB
02-02.txt AC 1 ms 3600 KiB
02-03.txt AC 1 ms 3732 KiB
02-04.txt AC 1 ms 3528 KiB
02-05.txt AC 1 ms 3592 KiB
02-06.txt AC 1 ms 3496 KiB
02-07.txt AC 1 ms 3524 KiB
02-08.txt AC 4 ms 3928 KiB
02-09.txt AC 1 ms 3564 KiB
02-10.txt AC 1 ms 3732 KiB
03-01.txt AC 356 ms 221780 KiB
03-02.txt AC 354 ms 221904 KiB
03-03.txt AC 354 ms 221972 KiB
03-04.txt AC 356 ms 221892 KiB
03-05.txt AC 354 ms 221928 KiB
03-06.txt AC 14 ms 11752 KiB
03-07.txt AC 1 ms 3484 KiB
03-08.txt AC 1 ms 3572 KiB
03-09.txt AC 697 ms 238924 KiB
04-01.txt AC 15 ms 11800 KiB
04-02.txt AC 15 ms 11880 KiB
04-03.txt AC 18 ms 12164 KiB
04-04.txt AC 18 ms 12108 KiB
04-05.txt AC 204 ms 18604 KiB
04-06.txt AC 15 ms 11652 KiB
04-07.txt AC 15 ms 11708 KiB
04-08.txt AC 19 ms 12308 KiB
04-09.txt AC 260 ms 18028 KiB
04-10.txt AC 11 ms 11780 KiB
04-11.txt AC 17 ms 12112 KiB
04-12.txt AC 15 ms 11932 KiB
04-13.txt AC 13 ms 11640 KiB
05-01.txt AC 442 ms 221304 KiB
05-02.txt AC 439 ms 223660 KiB
05-03.txt AC 608 ms 226868 KiB
05-04.txt AC 600 ms 232404 KiB
05-05.txt AC 354 ms 222040 KiB
05-06.txt AC 357 ms 221628 KiB
05-07.txt AC 353 ms 221896 KiB
05-08.txt AC 699 ms 234664 KiB
05-09.txt AC 260 ms 217972 KiB
05-10.txt AC 564 ms 230316 KiB
05-11.txt AC 449 ms 225452 KiB
05-12.txt AC 340 ms 219500 KiB
sample-01.txt AC 1 ms 3444 KiB
sample-02.txt AC 1 ms 3408 KiB
sample-03.txt AC 1 ms 3516 KiB
sample-04.txt AC 1 ms 3364 KiB
sample-05.txt AC 1 ms 3428 KiB