提出 #71906621
ソースコード 拡げる
#ifndef BZ
#pragma GCC optimize "-O3"
#endif
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#define ALL(v) (v).begin(), (v).end()
#define rep(i, l, r) for (int i = (l); i < (r); ++i)
using ll = long long;
using ld = long double;
using ull = unsigned long long;
using namespace std;
const ll MOD = 998244353;
ll pw(ll a, ll b) {
ll ans = 1;
while (b) {
while (!(b & 1))
b >>= 1, a = (a * a) % MOD;
ans = (ans * a) % MOD, --b;
}
return ans;
}
ll get_sum(ll n, ll b, ll mx) {
ll d = b * pw(mx, MOD - 2) % MOD;
ll s = 0;
if (d == 1) {
s = n;
} else {
ll p = (1 - pw(d, n));
ll q = 1 - d;
s = p * pw(q, MOD - 2) % MOD;
}
return (s * pw(mx, n - 1)) % MOD;
}
ll solve1(ll n, int b, int mx) {
n -= 1; // TODO
ll cnt = get_sum(n, b, mx) * b % MOD;
cnt = (cnt - get_sum(n, b - 1, mx) * (b - 1) % MOD) % MOD;
return cnt;
}
ll solve2(ll n, ll b, ll mx) {
n -= 2;
ll d = b * pw(mx, MOD - 2) % MOD;
ll s = 0;
if (d == 1) {
s = ((n + 2) * (n + 1) / 2) % MOD;
} else {
ll q = pw(1 - d, MOD - 2);
s = (1 - pw(d, n + 1)) * q % MOD;
s = (s + d * (-(n + 1) * pw(d, n) % MOD) % MOD * q) % MOD;
s = (s + d * (1 - pw(d, n + 1)) % MOD * q % MOD * q % MOD) % MOD;
}
s = s * pw(mx, n) % MOD;
return s;
}
ll n;
int m, k;
ll ans = 0;
int main() {
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cout.setf(ios::fixed), cout.precision(20);
cin >> n >> m >> k;
for (int a = 1; a <= m; ++a) {
for (int b = 1; b <= a; ++b) {
if (a * b + 1 > k) {
break;
}
// if (a != 3 || b != 3) {
// continue;
// }
ll mult = min(k - a * b, m);
if (a * b + b <= k) {
if (a == b) {
ll cnt = (pw(b, n - 1) - pw(b - 1, n - 1) - pw(b - 1, n - 2) * (n - 1)) % MOD;
ans = (ans + cnt * mult) % MOD;
} else {
ll cnt = pw(b, n - 2) - pw(b - 1, n - 2);
cnt = cnt * (n - 1) % MOD;
cnt = cnt * mult % MOD;
ans = (ans + cnt) % MOD;
}
} else {
int mx = k - a * b;
// case 1: b before a
if (a > b) {
ll cnt = solve1(n - 1, b, mx);
ans = (ans + cnt * mult) % MOD;
}
// case 2: b after a
ll cnt = solve2(n - 1, b - 1, mx);
ans = (ans + cnt * mult) % MOD;
}
// cerr << a << " " << b << " " << (a * b + b <= k) << " " << ans << "\n";
}
}
ans %= MOD;
if (ans < 0) {
ans += MOD;
}
cout << ans << "\n";
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
D - Max Prod Plus |
| ユーザ |
LHiC |
| 言語 |
C++23 (Clang 21.1.0) |
| 得点 |
1200 |
| コード長 |
2969 Byte |
| 結果 |
AC |
| 実行時間 |
9 ms |
| メモリ |
3000 KiB |
コンパイルエラー
./Main.cpp:2:13: warning: unknown pragma ignored [-Wunknown-pragmas]
2 | #pragma GCC optimize "-O3"
| ^
1 warning generated.
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
1200 / 1200 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
example_00.txt, example_01.txt, example_02.txt, example_03.txt |
| All |
example_00.txt, example_01.txt, example_02.txt, example_03.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| example_00.txt |
AC |
2 ms |
2928 KiB |
| example_01.txt |
AC |
1 ms |
3000 KiB |
| example_02.txt |
AC |
1 ms |
2788 KiB |
| example_03.txt |
AC |
9 ms |
2812 KiB |
| test_00.txt |
AC |
7 ms |
2908 KiB |
| test_01.txt |
AC |
2 ms |
2968 KiB |
| test_02.txt |
AC |
4 ms |
2812 KiB |
| test_03.txt |
AC |
4 ms |
2980 KiB |
| test_04.txt |
AC |
5 ms |
2812 KiB |
| test_05.txt |
AC |
8 ms |
3000 KiB |
| test_06.txt |
AC |
5 ms |
2800 KiB |
| test_07.txt |
AC |
3 ms |
2940 KiB |
| test_08.txt |
AC |
3 ms |
2864 KiB |
| test_09.txt |
AC |
5 ms |
2992 KiB |
| test_10.txt |
AC |
9 ms |
2800 KiB |
| test_11.txt |
AC |
9 ms |
2868 KiB |
| test_12.txt |
AC |
9 ms |
3000 KiB |
| test_13.txt |
AC |
9 ms |
2888 KiB |
| test_14.txt |
AC |
8 ms |
2928 KiB |
| test_15.txt |
AC |
9 ms |
2812 KiB |
| test_16.txt |
AC |
9 ms |
2804 KiB |
| test_17.txt |
AC |
9 ms |
2908 KiB |
| test_18.txt |
AC |
1 ms |
2804 KiB |
| test_19.txt |
AC |
1 ms |
2924 KiB |
| test_20.txt |
AC |
1 ms |
2812 KiB |
| test_21.txt |
AC |
1 ms |
2864 KiB |
| test_22.txt |
AC |
1 ms |
2800 KiB |
| test_23.txt |
AC |
1 ms |
2864 KiB |
| test_24.txt |
AC |
1 ms |
2868 KiB |