結果
問題 | No.1596 Distance Sum in 2D Plane |
ユーザー |
![]() |
提出日時 | 2021-07-09 21:50:06 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 221 ms / 2,000 ms |
コード長 | 1,507 bytes |
コンパイル時間 | 7,068 ms |
コンパイル使用メモリ | 250,232 KB |
最終ジャッジ日時 | 2025-01-22 21:28:24 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace std;using namespace atcoder;using ll = long long;using ull = unsigned long long;using ld = long double;using pii = pair<int, int>;using pdd = pair<ld, ld>;using pll = pair<ll, ll>;using pli = pair<ll, int>;using pil = pair<int, ll>;template <typename T>using Graph = vector<vector<T>>;const int MOD = 1e9 + 7;const ld PI = acos(-1);struct COM {vector<ll> inv, fac, finv;COM(int N) : inv(N), fac(N), finv(N) {inv[1] = 1;fac[0] = fac[1] = 1;finv[0] = finv[1] = 1;for (int i = 2; i < N; ++i) {inv[i] = MOD - (MOD / i) * inv[MOD % i] % MOD;fac[i] = fac[i - 1] * i % MOD;finv[i] = finv[i - 1] * inv[i] % MOD;}}ll calc(int a, int b) {return (fac[a] * finv[b] % MOD) * finv[a - b] % MOD;}};int main() {cin.tie(0);ios::sync_with_stdio(false);int N, M;cin >> N >> M;COM com(2 * N + 10);ll ans = com.calc(2 * N, N) * 2 * N % MOD;for (int i = 0; i < M; ++i) {int t, x, y;cin >> t >> x >> y;if (t == 1) {ll tmp = com.calc(x + y, x) * com.calc(2 * N - (x + y + 1), N - y) % MOD;ans -= tmp;} else {ll tmp = com.calc(x + y, x) * com.calc(2 * N - (x + y + 1), N - x) % MOD;ans -= tmp;}}ans %= MOD;if (ans < 0)ans += MOD;cout << ans << endl;return 0;}