【Floyd判圈算法】UVa11549Calculator Conundrum
2015-11-15 21:37
232 查看
题目链接
该题在《训练指南》中有,这一道不错的题。
题目描述:对一个数kk,取k∗kk*k的前nn个数。无限操作下去。求其中出现的最大值。
数据范围:1<=n<=91<=n<=9,0<=k<10n0<=k<10^n
首先肯定会出现循环,只有10n10^n个数。
如何判环决定了耗时的多少。
算法一:用STL中的set
set版,耗时823823ms
算法二:Floyd判圈算法
该算法可以是否存在环,以及判断环的起点与长度。
蒟蒻觉得是一个很神奇的算法。
知识链接
耗时199199ms
该题在《训练指南》中有,这一道不错的题。
题目描述:对一个数kk,取k∗kk*k的前nn个数。无限操作下去。求其中出现的最大值。
数据范围:1<=n<=91<=n<=9,0<=k<10n0<=k<10^n
首先肯定会出现循环,只有10n10^n个数。
如何判环决定了耗时的多少。
算法一:用STL中的set
set版,耗时823823ms
#include <cstdio> #include <set> #define LL long long int #define max(a,b) ((a)>(b)?(a):(b)) using namespace std ; set<int>Hash ; int n ,k ,ans ; char flag[35] ; int pos ; int cal(LL num) { num*=num ,pos=0 ; while(num) { flag[++pos]=num%10 ; num/=10 ; } int ans=0 ; for(int cnt=0;cnt<n;++cnt) ans=ans*10+flag[pos-cnt] ; return ans ; } int main() { int cas ; scanf("%d",&cas) ; while(cas--) { scanf("%d%d",&n,&k) ; ans=k ; Hash.clear() ; while(!Hash.count(k)) { Hash.insert(k) ; k=cal(k) ; ans=max(ans,k) ; } printf("%d\n",ans) ; } return 0 ; }
算法二:Floyd判圈算法
该算法可以是否存在环,以及判断环的起点与长度。
蒟蒻觉得是一个很神奇的算法。
知识链接
耗时199199ms
#include <cstdio> #define max(a,b) ((a)>(b)?(a):(b)) #define LL long long int using namespace std ; int n ,k ,k2 ,ans ; char flag[35] ; int pos ; int cal(LL num) { num*=num ,pos=0 ; while(num) { flag[++pos]=num%10 ; num/=10 ; } int ans=0 ; for(int cnt=0;cnt<n;++cnt) ans=ans*10+flag[pos-cnt] ; return ans ; } int main() { int cas ; scanf("%d",&cas) ; while(cas--) { scanf("%d%d",&n,&k) ; ans=k2=k ; do { k=cal(k) ; ans=max(k,ans) ; k2=cal(k2) ,ans=max(ans,k2) ; k2=cal(k2) ,ans=max(ans,k2) ; } while(k!=k2) ; printf("%d\n",ans) ; } return 0 ; }
相关文章推荐
- windows系统的操作问题
- 一路走来之委托
- HTML fieldset标签
- 思考中前进----泛型和Object比较
- Linux之sort命令
- 动手动脑
- Javarscript中的原型链
- jQuery-这个才是水神写的
- 算法自带的random.shuffle
- 网球循环赛日程表
- 系统级IO实践学习记录
- Python小例子(判断质数)
- 如何成为优秀的驱动开发工程师
- 打开网页的操作 发短信等
- STM32中断一些概念(主要是外部中断)
- 信息安全系统设计基础第十周
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest H】【字符串哈希 构造】Hash Code Hacker 构造有相同哈希值的不同字符串
- Java多线程线程、同步代码块、同步函数、死锁
- 顺序入栈的出栈方法种数
- A*算法