結果
問題 | No.1879 How many matchings? |
ユーザー |
|
提出日時 | 2022-03-18 23:19:42 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,147 bytes |
コンパイル時間 | 3,450 ms |
コンパイル使用メモリ | 233,948 KB |
実行使用メモリ | 51,324 KB |
最終ジャッジ日時 | 2024-10-03 08:30:23 |
合計ジャッジ時間 | 5,584 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 WA * 10 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>#define rep(i,a,b) for(int i=a;i<b;i++)#define rrep(i,b) for(int i=b-1;i>=0;i--)#define rbit(i,a) for(int i=0;i<(1<<a);i++)#define all(x) (x).begin(),(x).end()template<class T>bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }template<class T>bool chmin(T &a, const T &b) { if (b<a) { a = b; return 1; } return 0; }typedef long long ll;typedef long double lld;using namespace std;using namespace atcoder;using mint=static_modint<1000000007>;const ll mod=1e9+7;int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};const string zton="0123456789";const string atoz="abcdefghijklmnopqrstuvwxyz";ll gcd(ll a,ll b){ll r;r=a%b;if(r==0){return b;}else{return gcd(b,r);}}typedef pair<ll,int> P;ll power2[101010];ll inv[2001010];ll kaijou[2001010];ll kaijou_inv[2001010];ll nck(ll n,ll k){if(n<k)return 0ll;else return (((kaijou[n]*kaijou_inv[k])%mod)*kaijou_inv[n-k])%mod;}ll npk(ll n,ll k){return (kaijou[n]*kaijou_inv[n-k])%mod;}typedef vector<int> vec;typedef vector<vec> mat;mat mul (mat &A,mat &B){mat C(A.size(),vec(B[0].size()));rep(i,0,A.size()){rep(k,0,B.size()){rep(j,0,B[0].size()){C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod;}}}return C;}mat pow(mat A,ll n){mat B(A.size(),vec(A.size()));rep(i,0,A.size()){B[i][i]=1;}while(n>0){if(n&1)B=mul(B,A);A=mul(A,A);n>>=1;}return B;}int main(void){inv[0]=1;inv[1]=1;rep(i,2,2001010) inv[i]=inv[mod%i]*(mod-mod/i)%mod;kaijou[0]=1ll;rep(i,1,2001010){kaijou[i]=kaijou[i-1]*1ll*i;kaijou[i]%=mod;}kaijou_inv[0]=1ll;rep(i,1,2001010){kaijou_inv[i]=kaijou_inv[i-1]*1ll*(inv[i]);kaijou_inv[i]%=mod;}power2[0]=1;rep(i,0,101009)power2[i+1]=power2[i]*2%mod;ll N;cin >> N;N/=2;N++;mat A(2,vec(2));A[0][0]=1;A[0][1]=1;A[1][0]=1;A[1][1]=0;A=pow(A,N);cout << A[1][0] << endl;}