結果
| 問題 |
No.533 Mysterious Stairs
|
| コンテスト | |
| ユーザー |
HERRO
|
| 提出日時 | 2017-06-24 00:09:48 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,035 bytes |
| コンパイル時間 | 564 ms |
| コンパイル使用メモリ | 73,040 KB |
| 実行使用メモリ | 13,632 KB |
| 最終ジャッジ日時 | 2024-10-04 08:15:24 |
| 合計ジャッジ時間 | 11,061 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 TLE * 1 -- * 9 |
ソースコード
#include<iostream>
#include<map>
using namespace std;
typedef map<int,int> imap;
int main() {
int n;
cin >> n;
if(n<3){ cout << 1 << endl; return 0; }
if(n==3){ cout << 3 << endl; return 0; }
imap a, b, c;
int ans=0,m=int(1e9)+7;
a[1]=1;b[2]=1;c[3]=1;
while(a.size()>0||b.size()>0||c.size()>0){
imap x, y, z;
for(auto it=a.begin();it!=a.end();it++){
int k=it->first,v=it->second;
if(k+2<n){y[k+2]=(y[k+2]+v)%m;}
else if(k+2==n){ans=(ans+v)%m;}
if(k+3<n){z[k+3]=(z[k+3]+v)%m;}
else if(k+3==n){ans=(ans+v)%m;}
}
for(auto it=b.begin();it!=b.end();it++){
int k=it->first,v=it->second;
if(k+1<n){x[k+1]=(x[k+1]+v)%m;}
else if(k+1==n){ans=(ans+v)%m;}
if(k+3<n){z[k+3]=(z[k+3]+v)%m;}
else if(k+3==n){ans=(ans+v)%m;}
}
for(auto it=c.begin();it!=c.end();it++){
int k=it->first,v=it->second;
if(k+1<n){x[k+1]=(x[k+1]+v)%m;}
else if(k+1==n){ans=(ans+v)%m;}
if(k+2<n){y[k+2]=(y[k+2]+v)%m;}
else if(k+2==n){ans=(ans+v)%m;}
}
a=x;b=y;c=z;
}
cout << ans << endl;
return 0;
}
HERRO