結果
問題 | No.2199 lower_bound and upper_bound |
ユーザー |
|
提出日時 | 2023-03-14 22:50:16 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 107 ms / 2,000 ms |
コード長 | 1,332 bytes |
コンパイル時間 | 870 ms |
コンパイル使用メモリ | 86,304 KB |
最終ジャッジ日時 | 2025-02-11 11:22:27 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:37:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 37 | scanf("%d %d %d", &n, &l, &u); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>#include<string.h>#include<stdlib.h>#include <map>#include <vector>#include <queue>#include <deque>#include <set>#include <stack>#include <algorithm>#include <array>#include <unordered_set>#include <unordered_map>#include <string>using namespace std;bool rcmp(int a, int b) { return a>b; }typedef long long LL;#define MOD 998244353int expit(LL b, int e) {if (b<0) return 0;LL r=1;while(e) {if (e&1) {r*=b; r%=MOD; }b*=b; b%=MOD;e>>=1;}return r;}int ff[300004];int main() {int n, i, l, u;LL v, r=0;scanf("%d %d %d", &n, &l, &u);ff[0]=1;for (i=1; i<=n+n+u+2; i++) {v=ff[i-1]; v*=i; v%=MOD;ff[i]=v;}r=ff[n+n+u];r*=expit(ff[n], MOD-2); r%=MOD;r*=expit(ff[n+u], MOD-2); r%=MOD;v=ff[n+n+l-1];v*=expit(ff[n], MOD-2); v%=MOD;v*=expit(ff[n+l-1], MOD-2); v%=MOD;r-=v; if (r<0) r+=MOD;if (n-2>=0) {v=ff[n+n+u];v*=expit(ff[n+u+2], MOD-2); v%=MOD;v*=expit(ff[n-2], MOD-2); v%=MOD;r-=v; if (r<0) r+=MOD;}if (n+l-u-3>=0) {v=ff[n+n+l-1];v*=expit(ff[n+u+2], MOD-2); v%=MOD;v*=expit(ff[n+l-u-3], MOD-2); v%=MOD;r+=v; if (r>=MOD) r-=MOD;}printf("%lld\n", r);return 0;}