Submission #16874764


Source Code Expand

#define _USE_MATH_DEFINES
#include <bits/stdc++.h>

using namespace std;

using i64 = long long;
#define forn(a, e) for (i64 a = 0; a < (i64)(e); a++)
#define forr(a, s, e) for (i64 a = s; a < (i64)(e); a++)
#define fore(e, a) for (auto& e : a)

#ifdef LOCAL
#define logv(a) {cerr << #a << " = "; fore(e, a) {cerr << e << " ";} cerr << "\n";}
#define logvp(a) {cerr << #a << " = "; fore(e, a) {cerr << "(" << e.first << ", " << e.second << ") ";} cerr << "\n";}
#define logvv(a) {cerr << #a << " = \n"; fore(r, a) { fore(e, r) {cerr << e << " ";} cerr << "\n";} }
#define logvf(a, field) {cerr << #a"."#field << " = \n"; fore(e, a) { cerr << e.field << " ";} cerr << "\n"; }
#define logvff(a, f1, f2) {cerr << #a".{"#f1 << ", "#f2 << "} = \n"; fore(e, a) { cerr << "(" << e.f1 <<", " << e.f2 << ") ";} cerr << "\n"; }
#define logs(a) cerr << #a << " = " << (a) << "\n";
#define logss(a, b) cerr << #a << " = " << (a) << ", " << #b << " = " << (b) << "\n";
#define logp(a) cerr << #a << " = " << "(" << a.first << ", " << a.second << ")" << "\n";
#define cond(pred, stmt) if (pred) { stmt }
#else
#define logv(a)
#define logvp(a)
#define logvv(a)
#define logvf(a, field)
#define logvff(a, f1, f2)
#define logs(a)
#define logss(a, b)
#define logp(a)
#define cond(pred, stmt)
#endif

using iip = pair<int, int>;
using llp = pair<i64, i64>;
using ivec = vector<int>;
using llvec = vector<i64>;
using svec = vector<string>;
template<typename T> using vec = vector<T>;

template<typename T, typename Dim>
auto make_vec(T value, Dim dim) { return vector<T>(dim, value); }
template<typename T, typename Dim1, typename... Dim>
auto make_vec(T value, Dim1 dim1, Dim... dims) { return make_vec(make_vec(value, dims...), dim1); }

template<typename T>
bool uax(T& v, const T& newv) { if (v < newv) { v = newv; return true; } else return false; }
template<typename T>
bool uin(T& v, const T& newv) { if (v > newv) { v = newv; return true; } else return false; }

template<typename T>
istream& operator>>(istream& is, vector<T>& c) { for (auto& e : c) is >> e; return is; }
template<typename T, size_t N>
istream& operator>>(istream& is, array<T, N>& c) { for (auto& e : c) is >> e; return is; }

template<typename ...T>
istream& read(T&... args) { return (cin >> ... >> args); }

static mt19937 rande(123123);
template<typename T>
T rand_int(T from, T to) { uniform_int_distribution<T> distr(from, to); return distr(rande); }

// const i64 INF = 1e18;
const int INF = 2e9;
const i64 M = 998244353;
const int MXB = 20;
using bin = bitset<MXB + 1>;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    rande.seed(chrono::steady_clock::now().time_since_epoch().count());

    int n, k;
    while (read(n, k)) {
        vec<iip> seg(k);
        forn(i, k) {
            read(seg[i].first, seg[i].second);
            seg[i].first; seg[i].second;
        }
        sort(seg.begin(), seg.end());

        llvec dp(n);
        llvec sdp(n + 1);
        dp[0] = 1;
        sdp[1] = 1;

        forr(i, 1, n) {
                // logs(i);
            forn(j, k) {
                int r = i - seg[j].first;
                int l = i - seg[j].second;
                if (r < 0) {
                    continue;
                }
                uax(l, 0);
                dp[i] += (M + sdp[r + 1] - sdp[l]) % M;
                dp[i] %= M;
            }
            sdp[i + 1] = (sdp[i] + dp[i]) % M;
        }
        // logv(dp);
        // logv(sdp);
        cout << dp[n - 1] << endl;
    }
}

Submission Info

Submission Time
Task D - Leaping Tak
User msporyshev
Language C++ (GCC 9.2.1)
Score 400
Code Size 3600 Byte
Status AC
Exec Time 19 ms
Memory 6388 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 28
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt, s4.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, s1.txt, s2.txt, s3.txt, s4.txt
Case Name Status Exec Time Memory
01.txt AC 8 ms 3648 KiB
02.txt AC 2 ms 3452 KiB
03.txt AC 2 ms 3508 KiB
04.txt AC 3 ms 3640 KiB
05.txt AC 2 ms 3564 KiB
06.txt AC 2 ms 3548 KiB
07.txt AC 2 ms 3496 KiB
08.txt AC 2 ms 3604 KiB
09.txt AC 2 ms 3560 KiB
10.txt AC 2 ms 3576 KiB
11.txt AC 2 ms 3604 KiB
12.txt AC 13 ms 6384 KiB
13.txt AC 12 ms 6320 KiB
14.txt AC 15 ms 6244 KiB
15.txt AC 17 ms 6300 KiB
16.txt AC 16 ms 6356 KiB
17.txt AC 19 ms 6244 KiB
18.txt AC 19 ms 6316 KiB
19.txt AC 14 ms 6388 KiB
20.txt AC 15 ms 6288 KiB
21.txt AC 9 ms 6292 KiB
22.txt AC 9 ms 6320 KiB
23.txt AC 11 ms 6244 KiB
24.txt AC 12 ms 6292 KiB
s1.txt AC 2 ms 3636 KiB
s2.txt AC 2 ms 3612 KiB
s3.txt AC 2 ms 3636 KiB
s4.txt AC 2 ms 3564 KiB