6240 | 2023-11-08 12:47:28 | Error42 | Tömbök előállítása | cpp17 | Elfogadva 100/100 | 967ms | 5084 KiB |
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
template <ll M>
struct modular {
ll val;
// n >= 0
modular(const ll n) {
if (n < M)
val = n;
else if (n < 2 * M)
val = n - M;
else
val = n % M;
}
[[nodiscard]] modular operator +(const modular& rhs) const {
return val + rhs.val;
}
[[nodiscard]] modular operator -(const modular& rhs) const {
return val + M - rhs.val;
}
[[nodiscard]] modular operator *(const modular& rhs) const {
return val * rhs.val;
}
// p >= 0
[[nodiscard]] modular pow(const ll& p) const {
if (p == 0)
return 1;
if (p % 2 == 0)
return (*this * *this).pow(p / 2);
else
return *this * pow(p - 1);
}
[[nodiscard]] modular inv() const {
return pow(M - 2);
}
[[nodiscard]] modular operator /(const modular& rhs) const {
return *this * rhs.inv();
}
modular& operator +=(const modular& rhs) {
return *this = *this + rhs;
}
modular& operator -=(const modular& rhs) {
return *this = *this - rhs;
}
modular& operator *=(const modular& rhs) {
return *this = *this * rhs;
}
modular& operator /=(const modular& rhs) {
return *this = *this / rhs;
}
explicit operator ll() const {
return val;
}
};
template <ll M>
ostream& operator<<(ostream& os, const modular<M>& modular) {
cout << modular.val;
return os;
}
using mod = modular<1'000'000'007>;
ll n, m, l, r, k;
vector<mod> identity;
vector<mod> combine(vector<mod> const& a, vector<mod> const& b) {
vector<mod> ret(m, 0);
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
int k = i + j >= m ? i + j - m : i + j;
ret[k] += a[i] * b[j];
}
}
return ret;
}
vector<mod> calc(ll const n) {
if (n == 1)
return identity;
else if (n % 2 == 1)
return combine(calc(n - 1), identity);
else {
auto const half = calc(n / 2);
return combine(half, half);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> l >> r >> k;
identity.assign(m, 0);
for (int i = 0; i < m; i++) {
identity[i] += (r - i + m) / m;
identity[i] -= (l - 1 - i + m) / m;
}
auto const ans = calc(n);
cout << ans[k] << "\n";
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 3ms | 1704 KiB | ||||
2 | Elfogadva | 3ms | 1864 KiB | ||||
3 | Elfogadva | 3ms | 2088 KiB | ||||
subtask2 | 10/10 | ||||||
4 | Elfogadva | 3ms | 2300 KiB | ||||
5 | Elfogadva | 3ms | 2500 KiB | ||||
6 | Elfogadva | 3ms | 2708 KiB | ||||
subtask3 | 10/10 | ||||||
7 | Elfogadva | 2ms | 2816 KiB | ||||
8 | Elfogadva | 3ms | 2920 KiB | ||||
9 | Elfogadva | 3ms | 2944 KiB | ||||
10 | Elfogadva | 2ms | 3008 KiB | ||||
11 | Elfogadva | 2ms | 3112 KiB | ||||
12 | Elfogadva | 2ms | 3108 KiB | ||||
13 | Elfogadva | 2ms | 3104 KiB | ||||
subtask4 | 7/7 | ||||||
14 | Elfogadva | 3ms | 3136 KiB | ||||
15 | Elfogadva | 3ms | 3328 KiB | ||||
16 | Elfogadva | 2ms | 3412 KiB | ||||
17 | Elfogadva | 2ms | 3408 KiB | ||||
18 | Elfogadva | 2ms | 3520 KiB | ||||
19 | Elfogadva | 3ms | 3736 KiB | ||||
20 | Elfogadva | 3ms | 3960 KiB | ||||
subtask5 | 8/8 | ||||||
21 | Elfogadva | 35ms | 4192 KiB | ||||
22 | Elfogadva | 17ms | 4080 KiB | ||||
23 | Elfogadva | 23ms | 4212 KiB | ||||
24 | Elfogadva | 14ms | 4064 KiB | ||||
25 | Elfogadva | 8ms | 4152 KiB | ||||
26 | Elfogadva | 4ms | 4156 KiB | ||||
27 | Elfogadva | 25ms | 4160 KiB | ||||
28 | Elfogadva | 4ms | 4284 KiB | ||||
29 | Elfogadva | 35ms | 4376 KiB | ||||
30 | Elfogadva | 35ms | 4276 KiB | ||||
subtask6 | 25/25 | ||||||
31 | Elfogadva | 6ms | 4472 KiB | ||||
32 | Elfogadva | 6ms | 4472 KiB | ||||
33 | Elfogadva | 4ms | 4472 KiB | ||||
34 | Elfogadva | 4ms | 4572 KiB | ||||
35 | Elfogadva | 4ms | 4568 KiB | ||||
36 | Elfogadva | 4ms | 4472 KiB | ||||
37 | Elfogadva | 3ms | 4476 KiB | ||||
38 | Elfogadva | 3ms | 4484 KiB | ||||
39 | Elfogadva | 4ms | 4484 KiB | ||||
40 | Elfogadva | 7ms | 4612 KiB | ||||
subtask7 | 40/40 | ||||||
41 | Elfogadva | 268ms | 4708 KiB | ||||
42 | Elfogadva | 855ms | 5000 KiB | ||||
43 | Elfogadva | 967ms | 5008 KiB | ||||
44 | Elfogadva | 961ms | 5008 KiB | ||||
45 | Elfogadva | 930ms | 5008 KiB | ||||
46 | Elfogadva | 250ms | 4944 KiB | ||||
47 | Elfogadva | 393ms | 4940 KiB | ||||
48 | Elfogadva | 4ms | 5000 KiB | ||||
49 | Elfogadva | 661ms | 5084 KiB | ||||
50 | Elfogadva | 305ms | 4992 KiB |