- 传统题 1000ms 512MiB
-
说明
科比·布莱恩特(Kobe Bryant,1978年8月23日—2020年1月26日),全名科比·比恩·布莱恩特·考克斯(Kobe Bean Bryant Cox),出生于美国宾夕法尼亚州费城,美国已故篮球运动员,司职得分后卫/小前锋。他在打篮球时穿的球服号码为8与24,于是我们称含有8或24的数称为牢大数。温馨提示:不要在半夜打这道题代码,你会被牢大肘击。
输入格式
输入的都是整数对 n,m,每次输入只输入一行。
输出格式
对于每个整数对,输出一个不含有8或24数字的统计个数,该数值占一行位置。
样例
输入数据 1
1 1000
输出数据 1
289
输入数据 2
8 242424
输出数据 2
105540
-
提示
数据范围:对于全部数据,0<n≤m<。、
-
#include <bits/stdc++.h> using namespace std; const int N=2e5+7; int n,m,a[N]; int f[4000][200]; int dfs(int pos,int six,int lit) { if(pos<=0) return 1; if(f[pos][six]>0&&!lit) return f[pos][six]; int ans=0,p=9;if(lit)p=a[pos]; for(int i=0;i<=p;++i) { if(i==8) continue; if(six&&i==4) continue; ans+=dfs(pos-1,i==2,lit&&i==p); } if(!lit) f[pos][six]=ans; return ans; } int solve(int x) { if(x<0) return 0; memset(f,-1,sizeof(f)); memset(a,0,sizeof(a)); int cnt=0; while(x) { a[++cnt]=x%10; x/=10; } return dfs(cnt,0,1); } int main() { while(scanf("%d%d",&n,&m)!=EOF) { if(!n&&!m) break; printf("%lld\n",m-n+1-solve(m)+solve(n-1)); } return 0; }
牢大数(see you again)
最新推荐文章于 2025-05-07 21:53:58 发布