Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
97472 | 揭伟琦 | 不吉利的数 | C++ | Accepted | 1 MS | 276 KB | 860 | 2024-11-15 23:04:24 |
#include <bits/stdc++.h> using namespace std; const int maxn=9; int f[maxn][10]; void init() { for(int i=0; i<=9; i++) if(i!=4) f[1][i]=1; for(int i=2; i<=maxn; i++) for(int j=0; j<=9; j++) { if(j==4) continue; for(int k=0; k<=9; k++) { if(k==4||j==6&&k==2) continue; f[i][j]+=f[i-1][k]; } } } int dp(int n) { if(!n) return 1; vector<int> nums; while(n) { nums.push_back(n%10); n/=10; } int ans=0; int last=0; for(int i=nums.size()-1; i>=0; i--) { int x=nums[i]; for(int j=0; j<x; j++) { if(j==4||last==6 && j==2) continue; ans+=f[i+1][j]; } if(x==4||last==6&&x==2) break; last=x; if(!i) ans++; } return ans; } int main() { init(); int L,R; while(cin>>L>>R) { if(L==0&&R==0) break; cout<<dp(R)-dp(L-1)<<endl; } return 0; }