QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#507706 | #6417. Classical Summation Problem | Poetry | AC ✓ | 147ms | 26628kb | C++23 | 3.6kb | 2024-08-06 20:22:47 | 2024-08-06 20:22:48 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
template<class T>
T power(T a, i64 b) {
T res = 1;
for (; b; b >>= 1, a *= a) {
if (b & 1)
res *= a;
}
return res;
}
template<const i64 P>
class ModInt {
public:
i64 x;
static i64 Mod;
ModInt() : x{0} {}
ModInt(int _x) : x{(_x % getMod() + getMod()) % getMod()} {}
ModInt(i64 _x) : x{(_x % getMod() + getMod()) % getMod()} {}
static void setMod(i64 Mod_) {
Mod = Mod_;
}
static i64 getMod() {
return !P ? Mod : P;
}
explicit constexpr operator int() const {
return x;
}
ModInt &operator += (ModInt a) & {
x = x + a.x >= getMod() ? x + a.x - getMod() : x + a.x;
return (*this);
}
ModInt &operator -= (ModInt a) & {
x = x - a.x < 0 ? x - a.x + getMod() : x - a.x;
return (*this);
}
ModInt &operator *= (ModInt a) & {
(x *= a.x) %= getMod();
return (*this);
}
constexpr ModInt inv() {
return power((*this), getMod() - 2);
}
ModInt &operator /= (ModInt a) & {
return (*this) *= a.inv();
}
friend ModInt operator + (ModInt lhs, ModInt rhs) {
return lhs += rhs;
}
friend ModInt operator - (ModInt lhs, ModInt rhs) {
return lhs -= rhs;
}
friend ModInt operator * (ModInt lhs, ModInt rhs) {
return lhs *= rhs;
}
friend ModInt operator / (ModInt lhs, ModInt rhs) {
return lhs /= rhs;
}
friend std::istream &operator >> (std::istream &is, ModInt &p) {
return is >> p.x;
}
friend std::ostream &operator << (std::ostream &os, ModInt p) {
return os << p.x;
}
int operator !() {
return !x;
}
friend bool operator == (ModInt lhs, ModInt rhs) {
return lhs.x == rhs.x;
}
friend bool operator != (ModInt lhs, ModInt rhs) {
return lhs.x != rhs.x;
}
ModInt operator -() {
return ModInt(getMod() - x);
}
ModInt &operator ++() & {
++x;
return *this;
}
ModInt operator ++(int) {
ModInt temp = *this;
++*this;
return temp;
}
} ;
template<>
i64 ModInt<0>::Mod = 1E9 + 7;
constexpr int P = 998244353, g = 3;
using Z = ModInt<P>;
struct Comb {
int n;
vector<Z> _fac;
vector<Z> _invfac;
vector<Z> _inv;
Comb() : n{0}, _fac{1}, _invfac{1}, _inv{0} {}
Comb(int n) : Comb() {init(n);}
void init(int m) {
m = min<int>(m, Z::getMod() - 1);
if (m <= n) return;
_fac.resize(m + 1);
_invfac.resize(m + 1);
_inv.resize(m + 1);
for (int i = n + 1; i <= m; i++) _fac[i] = _fac[i - 1] * i;
_invfac[m] = _fac[m].inv();
for (int i = m; i > n; i--) {
_invfac[i - 1] = _invfac[i] * i;
_inv[i] = _invfac[i] * _fac[i - 1];
} n = m;
}
Z fac(int m) {if (m > n) init(2 * m); return _fac[m];}
Z invfac(int m) {if (m > n) init(2 * m); return _invfac[m];}
Z inv(int m) {if (m > n) init(2 * m); return _inv[m];}
Z binom(int n, int m) {return n < m || m < 0 ? 0 : fac(n) * invfac(m) * invfac(n - m);}
} comb;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
Z ans = Z(n + 1) * power(Z(n), k);
if (k & 1 ^ 1) {
for (int i = 1; i < n; ++i) {
ans -= power(Z(i), k / 2) * power(Z(n - i), k / 2) * comb.binom(k, k / 2);
}
}
cout << ans / 2 << '\n';
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3480kb
input:
3 2
output:
14
result:
ok 1 number(s): "14"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
5 3
output:
375
result:
ok 1 number(s): "375"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3612kb
input:
2 2
output:
5
result:
ok 1 number(s): "5"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
10 9
output:
508778235
result:
ok 1 number(s): "508778235"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3540kb
input:
69 3
output:
11497815
result:
ok 1 number(s): "11497815"
Test #6:
score: 0
Accepted
time: 0ms
memory: 3552kb
input:
994 515
output:
33689623
result:
ok 1 number(s): "33689623"
Test #7:
score: 0
Accepted
time: 1ms
memory: 3940kb
input:
4476 6182
output:
114894183
result:
ok 1 number(s): "114894183"
Test #8:
score: 0
Accepted
time: 0ms
memory: 3816kb
input:
58957 12755
output:
932388891
result:
ok 1 number(s): "932388891"
Test #9:
score: 0
Accepted
time: 22ms
memory: 3884kb
input:
218138 28238
output:
392861201
result:
ok 1 number(s): "392861201"
Test #10:
score: 0
Accepted
time: 79ms
memory: 10496kb
input:
644125 316810
output:
420621854
result:
ok 1 number(s): "420621854"
Test #11:
score: 0
Accepted
time: 82ms
memory: 14996kb
input:
612914 505428
output:
973686286
result:
ok 1 number(s): "973686286"
Test #12:
score: 0
Accepted
time: 0ms
memory: 3812kb
input:
998216 938963
output:
251335926
result:
ok 1 number(s): "251335926"
Test #13:
score: 0
Accepted
time: 0ms
memory: 3824kb
input:
990516 996933
output:
549551960
result:
ok 1 number(s): "549551960"
Test #14:
score: 0
Accepted
time: 143ms
memory: 26468kb
input:
999019 999012
output:
637189128
result:
ok 1 number(s): "637189128"
Test #15:
score: 0
Accepted
time: 144ms
memory: 26628kb
input:
999928 999950
output:
185229465
result:
ok 1 number(s): "185229465"
Test #16:
score: 0
Accepted
time: 0ms
memory: 3584kb
input:
999999 999999
output:
384164916
result:
ok 1 number(s): "384164916"
Test #17:
score: 0
Accepted
time: 141ms
memory: 26444kb
input:
999999 1000000
output:
696165930
result:
ok 1 number(s): "696165930"
Test #18:
score: 0
Accepted
time: 0ms
memory: 3828kb
input:
1000000 999999
output:
219071706
result:
ok 1 number(s): "219071706"
Test #19:
score: 0
Accepted
time: 141ms
memory: 26508kb
input:
1000000 1000000
output:
128206597
result:
ok 1 number(s): "128206597"
Test #20:
score: 0
Accepted
time: 0ms
memory: 3584kb
input:
2 10
output:
1410
result:
ok 1 number(s): "1410"
Test #21:
score: 0
Accepted
time: 0ms
memory: 3824kb
input:
84 16
output:
297627153
result:
ok 1 number(s): "297627153"
Test #22:
score: 0
Accepted
time: 0ms
memory: 3768kb
input:
643 800
output:
489237163
result:
ok 1 number(s): "489237163"
Test #23:
score: 0
Accepted
time: 1ms
memory: 3844kb
input:
9903 880
output:
595167333
result:
ok 1 number(s): "595167333"
Test #24:
score: 0
Accepted
time: 12ms
memory: 5196kb
input:
97446 89750
output:
410205549
result:
ok 1 number(s): "410205549"
Test #25:
score: 0
Accepted
time: 30ms
memory: 18312kb
input:
186460 646474
output:
32638530
result:
ok 1 number(s): "32638530"
Test #26:
score: 0
Accepted
time: 62ms
memory: 8828kb
input:
508940 244684
output:
598321755
result:
ok 1 number(s): "598321755"
Test #27:
score: 0
Accepted
time: 72ms
memory: 16208kb
input:
583646 557758
output:
858695621
result:
ok 1 number(s): "858695621"
Test #28:
score: 0
Accepted
time: 137ms
memory: 26424kb
input:
969610 992608
output:
256683498
result:
ok 1 number(s): "256683498"
Test #29:
score: 0
Accepted
time: 142ms
memory: 26548kb
input:
995106 996434
output:
411791999
result:
ok 1 number(s): "411791999"
Test #30:
score: 0
Accepted
time: 133ms
memory: 26452kb
input:
999961 999872
output:
61222370
result:
ok 1 number(s): "61222370"
Test #31:
score: 0
Accepted
time: 147ms
memory: 26488kb
input:
999977 999908
output:
831096762
result:
ok 1 number(s): "831096762"
Test #32:
score: 0
Accepted
time: 141ms
memory: 26580kb
input:
999992 999998
output:
562977678
result:
ok 1 number(s): "562977678"
Test #33:
score: 0
Accepted
time: 14ms
memory: 3784kb
input:
1000000 2
output:
118436113
result:
ok 1 number(s): "118436113"
Test #34:
score: 0
Accepted
time: 11ms
memory: 26444kb
input:
2 1000000
output:
298823641
result:
ok 1 number(s): "298823641"