975 关于521【打表】
来源:互联网 发布:魔镜淘宝助手插件 编辑:程序博客网 时间:2024/05/22 08:04
关于521
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。
浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫,因为每个男生都会不经意的成为浪漫的制造者。此后,流年走到哪里都能看到5、2、1三个数字,他怒了,现在他想知道在连续的数中有多少数全部包含了这三个数字。例如12356就算一个,而5111就不算。特别的,如果他看到了521三个数连续出现,会特别的愤怒。例如35210。
- 输入
- 多组测试数据:
一行给定两个数a,b(0<a,b<1000000),表示数字的开始和结束。 - 输出
- 一行显示他想要知道的数有几个及显示有多少个数字令他特别的愤怒。用空格隔开。
- 样例输入
200 500300 9001 600
- 样例输出
Case 1:2 0Case 2:2 1Case 3:6 1
这个题放了很久,到现在才解决,也是醉了....
没什么技巧,完全是打表模拟(两个表),数组记录数量等常用方法,如果要说技巧的话,在判断是否出现5 1 2 三个数字的那个函数里使用了标记数组,这个比较灵活,在很多的算法的实现中都用到了标记数组,需要活用...
本来是想用更简单的方法解决,发现可能有漏洞,wa了,然后老老实实打表了..........
#include<stdio.h>#include<string.h>#define maxn 1000005int x[maxn],y[maxn],k=0;int search(int n){int vis[10];memset(vis,0,sizeof(vis));while(n){vis[n%10]=1;n/=10;if(vis[5]&&vis[1]&&vis[2])//三个都出现过{return 1;}}return 0;}int judge(int n){while(n>=521){if(n%1000==521)//找....{return 1;}n/=10;}return 0;}void db(){x[125]=1;for(int i=126;i<maxn;++i){x[i]=x[i-1];if(search(i)){++x[i];}}y[521]=1;for(int i=522;i<maxn;++i){y[i]=y[i-1];if(judge(i)){++y[i];}}}int main(){int n,m;db();while(~scanf("%d%d",&n,&m)){printf("Case %d:%d %d\n",++k,x[m]-x[n-1],y[m]-y[n-1]);}return 0;}
1 0
- 975 关于521【打表】
- 关于暴力与打表的重要性
- 关于打酱油
- 关于Android打log
- 打表
- 打表
- 打表
- 打表
- 打表
- 打表
- 关于打狗的问题
- 关于C#打操作EXCEL
- 关于打印(c#套打...)
- 关于使用adb 打logcat
- 关于idea打jar包
- 关于2003系统如何打sp1补丁
- 关于现在的股市,打个比方
- 关于光驱打叹号问题的解决
- 66 GCD常用方法
- linux网络配置
- 安卓系统API的使用
- 67 ARC单例实现
- VIJOS 1053 Easy sssp 负权最短路
- 975 关于521【打表】
- Android之发送短信和接收验证码
- 给docker的官方mongo镜像添加认证登录
- 关于View的ScrollTo, getScrollX 和 getScrollY
- 68 MRC单例实现
- 程序媛开发之路—字符
- GitHub优秀的 Android 开源项目整理-经典版
- org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update
- 69 单例使用宏实现