提出 #41103973


ソースコード 拡げる

#include <atcoder/all>
using namespace atcoder;
#include <bits/stdc++.h>
#include <cassert>
using namespace std;
using ll = long long;
const double pi = 3.14159265359;
const ll INF = 1LL << 60;

template<class T> inline bool chmin(T& a, T b){ if (a > b){a = b; return true;} return false;}
template<class T> inline bool chmax(T& a, T b){ if (a < b){a = b; return true;} return false;}

using mint = modint998244353;
//using mint = modint1000000007;
//using mint = modint;  // mint::set_mod(p); later
//using mint = static_modint<1000000009>;

bool init = false;
mint fact[1000006];

// nCr : n 個のマスから r 個選ぶ選び方
mint comb(int n, int r){
  return fact[n] / fact[n - r] / fact[r];
}

int H, W, K;

map<pair<int, int>, mint> mp;

vector<mint> buf;

mint f(int h, int w){
  if (h * w < K || h < 0 || w < 0) return 0;
  return mint(buf[h*w]);
}

mint g(int h, int w){
  mint ans =
    f(h, w)
    - (f(h-1, w) + f(h-1, w) + f(h, w-1) + f(h, w-1)
       - f(h-1, w-1) - f(h-2, w) - f(h-1,w-1) - f(h-1, w-1) - f(h, w-2) - f(h-1, w-1)
       + f(h-1, w-2) + f(h-2, w-1) + f(h-1, w-2) + f(h-2, w-1)
       - f(h-2, w-2)
       );
  return ans;
}

int main()
{
  cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);

  cin >> H >> W >> K;

  // Init tables
  fact[0] = 1;
  for (int i = 1; i <= 1000000; i++){
    fact[i] = fact[i - 1] * i;
  }
  buf.resize(H*W+1);
  for (int i = K; i <= H*W; i++){
    buf[i] = comb(i, K);
  }
  
  mint ans = 0;

  for (int y = 1; y <= H; y++){
    ll ny = H - y + 1;
    for (int x = 1; x <= W; x++){
      ll nx = W - x + 1;
      int area = y * x;
      if (area >= K){
	ans += ny * nx * area * g(y, x) / f(H, W);
      }
    }
  }

  cout << ans.val() << endl;
  return 0;
}

提出情報

提出日時
問題 F - Minimum Bounding Box 2
ユーザ unnohideyuki
言語 C++ (GCC 9.2.1)
得点 500
コード長 1807 Byte
結果 AC
実行時間 356 ms
メモリ 11108 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 3
AC × 20
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 15 ms 7444 KiB
00_sample_02.txt AC 14 ms 7544 KiB
00_sample_03.txt AC 26 ms 7516 KiB
01_test_01.txt AC 12 ms 7536 KiB
01_test_02.txt AC 13 ms 7488 KiB
01_test_03.txt AC 15 ms 11108 KiB
01_test_04.txt AC 349 ms 11080 KiB
01_test_05.txt AC 348 ms 11092 KiB
01_test_06.txt AC 356 ms 11092 KiB
01_test_07.txt AC 205 ms 10580 KiB
01_test_08.txt AC 261 ms 10196 KiB
01_test_09.txt AC 30 ms 10572 KiB
01_test_10.txt AC 102 ms 10880 KiB
01_test_11.txt AC 75 ms 10472 KiB
01_test_12.txt AC 144 ms 8704 KiB
01_test_13.txt AC 239 ms 9820 KiB
01_test_14.txt AC 129 ms 8456 KiB
01_test_15.txt AC 170 ms 8880 KiB
01_test_16.txt AC 91 ms 8044 KiB
01_test_17.txt AC 157 ms 8724 KiB