結果
問題 | No.1269 I hate Fibonacci Number |
ユーザー |
|
提出日時 | 2020-10-23 23:44:38 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 75 ms / 3,000 ms |
コード長 | 1,570 bytes |
コンパイル時間 | 1,987 ms |
コンパイル使用メモリ | 187,084 KB |
実行使用メモリ | 202,460 KB |
最終ジャッジ日時 | 2024-07-21 13:46:30 |
合計ジャッジ時間 | 5,380 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
#include<bits/stdc++.h>#define mod 1000000007using namespace std;using Graph=vector<vector<int>>;long long remtop(long long v){if(v<10){return 0;}string mem=to_string(v);mem.erase(0,1);return stoll(mem);}int main(){set<long long> st;map<long long,int> mp;long long n,a,b;cin >> n >> a >> b;long long f[128];f[0]=1;f[1]=1;for(int i=0;;i++){if(i>=2){f[i]=f[i-1]+f[i-2];}if(f[i]>b){break;}if(f[i]<a){continue;}mp[f[i]]=-1;long long v=f[i];while(v>0){st.insert(v);v/=10;}}st.insert(0);int c=0;long long val[524288];for(auto x: st){if(mp[x]==-1){continue;}//printf("[[[%lld]]]\n",x);mp[x]=c;val[c]=x;c++;}//printf("%d\n",mp[55]);Graph g(c);for(int i=0;i<c;i++){long long cv=val[i];for(long long j=0;j<10;j++){long long nv=cv*10+j;long long k=0;while(nv>0){if(mp[nv]==-1){k=-1;break;}if(mp[nv]!=0 && k==0){k=mp[nv];}nv=remtop(nv);}//printf("%d(%d + %d) -> %d\n",i,cv,j,k);if(k==-1){continue;}g[i].push_back(k);}}long long dp[5005][5005]={0},res=0;for(int i=0;i<n;i++){for(int j=0;j<c;j++){if(dp[i][j]==0){continue;}for(auto nx : g[j]){dp[i+1][nx]+=dp[i][j];}}for(int j=1;j<10;j++){if(mp[j]!=-1){dp[i+1][mp[j]]++;}}res=0;for(int j=0;j<c;j++){dp[i+1][j]%=mod;res+=dp[i+1][j];}res%=mod;}printf("%lld\n",res);return 0;}