結果
| 問題 |
No.1596 Distance Sum in 2D Plane
|
| コンテスト | |
| ユーザー |
tabae326
|
| 提出日時 | 2021-07-09 21:58:19 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 919 ms / 2,000 ms |
| コード長 | 1,386 bytes |
| コンパイル時間 | 4,886 ms |
| コンパイル使用メモリ | 197,320 KB |
| 最終ジャッジ日時 | 2025-01-22 21:40:56 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, srt, end) for (long long i = (srt); i < (long long)(end); i++)
#include <atcoder/modint>
using mint = atcoder::modint1000000007;
#define MOD_UTILS_NMAX 2000100
struct mod_utils {
// data
std::vector<mint> _fac, _inv;
// construct & initialize
mod_utils() {
_fac.resize(MOD_UTILS_NMAX);
_inv.resize(MOD_UTILS_NMAX);
_fac[0] = 1; _fac[1] = 1;
_inv[0] = 1; _inv[1] = 1;
for(int i = 2; i < MOD_UTILS_NMAX; i++) {
_fac[i] = _fac[i-1] * mint(i);
_inv[i] = _inv[i-1] * mint(i).inv();
}
}
} _mod_utils;
// functions
mint fac(int i) { return _mod_utils._fac[i]; }
mint inv_fac(int i) { return _mod_utils._inv[i]; }
mint nck(int n, int k) {
if (n < k) return 0;
if (n < 0 || k < 0) return 0;
if(k == 0 || k == n) return 1;
return _mod_utils._fac[n] * _mod_utils._inv[k] * _mod_utils._inv[n-k];
}
void solve() {
ll n, m;
cin >> n >> m;
mint ans = nck(2*n, n) * 2 * n;
rep(i, 0, m) {
ll t, x, y;
cin >> t >> x >> y;
if(t == 1) ans -= nck(x+y, x) * nck(2*n-1-x-y, n-y);
else ans -= nck(x+y, x) * nck(2*n-1-x-y, n-x);
}
cout << ans.val() << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
tabae326