結果
| 問題 |
No.660 家を通り過ぎないランダムウォーク問題
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-08-10 14:43:50 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 15 ms / 2,000 ms |
| コード長 | 862 bytes |
| コンパイル時間 | 1,798 ms |
| コンパイル使用メモリ | 159,428 KB |
| 実行使用メモリ | 13,000 KB |
| 最終ジャッジ日時 | 2025-08-10 14:43:55 |
| 合計ジャッジ時間 | 3,563 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 45 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=400010;
const int INF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7;
int inv[N];
int ijc[N];
int jc[N];
void init(int n){
inv[1]=1;
jc[0]=1;
ijc[0]=1;
for(int i=2;i<=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for(int i=1;i<=n;i++){
jc[i]=jc[i-1]*i%mod;
ijc[i]=ijc[i-1]*inv[i]%mod;
}
return;
}
int C(int n,int m){
if(n<m)return 0;
int fz=jc[n];
int fm=ijc[m]*ijc[n-m]%mod;
return fz*fm%mod;
}
int n;
int ans;
int dp[N];
signed main(){
// ios::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
init(N-10);
cin>>n;
for(int i=n-1;i<=2*n-1;i++){
if((i-n+1)%2)continue;
int A=(i-(n-1))/2;
int B=(n-1)+(i-(n-1))/2;
ans+=C(i,A)-C(i,B+1);
ans=(ans%mod+mod)%mod;
}
cout<<ans<<"\n";
return 0;
}
/*
dp[i]=C(i,n)-dp[n]*C(i-n,(i-n)/2)-dp[n+2]*C(i-(n+2),i-(n+2)/2)-...
*/
vjudge1