提出 #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
結果
AC × 4
AC × 29
セット名 テストケース
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