题意:有一个老式计算器,只能保存最多n位数,如果结果超出n位,则保留前n位。现在输入一个n和一个k,k表示一个数字,然后不停的求k的平方并令k=k*k,发现会出现循环的结果,求所有结果种最大的一个。

分析:暴力模拟可以过的,但有更好的算法。暴力:用哈希、set都可以。高效算法:Floyd判圈算法,假设两个小孩在有环形的跑道上跑,一个速度为v,另一个速度为2*v,出发点相同,那么总会有相遇的时候,相遇的时候就是跑完一圈了,那么最大值一定跑过了~

代码:

View Code

 1 #include <stdio.h>
 2 #include <iostream>
 3 #define DEBUG
 4 using namespace std;
 5 int buf[10];
 6 int next(int n, int k){
 7     if(k==0) return 0;
 8     long long k2 = (long long)k*k;
 9     int len = 0;
10     while(k2>0){
11         buf[len++]=k2%10;
12         k2/=10;
13     }
14     if(n>len) n=len;            //k很小、n很大的情况
15     int ans=0;
16     for(int i=0; i<n; i++){
17         ans = ans*10 + buf[--len];
18     }
19     return ans;
20 }
21 int main(){
22 #ifndef DEBUG
23     freopen("in.txt", "r", stdin);
24 #endif
25     int cas;
26     scanf("%d", &cas);
27     while(cas--){
28         int n, k;
29         scanf("%d%d", &n, &k);
30         int k1=k, k2=k, ans=k;
31         while(true){
32             k1 = next(n, k1);
33             k2 = next(n, k2);
34             if(ans<k2) ans=k2;
35             k2 = next(n, k2);
36             if(ans<k2) ans=k2;
37
38             if(k1==k2) break;
39         }
40         printf("%d\n", ans);
41     }
42     return 0;
43 }

#   Problem Verdict Language Run Time Submission Date
11274827 11549 Calculator Conundrum Accepted C++ 0.524 2013-02-11 07:35:50

记录一下~只用了0.5s~

转载于:https://www.cnblogs.com/zjutzz/archive/2013/02/11/2910019.html

uva11549Calculator Conundrum相关推荐

  1. CodeForces - 1567C Carrying Conundrum(思维/状压)

    题目链接:点击查看 题目大意:规定加法中使用隔项进位,问给定的 nnn 有多少种方案可以通过 "隔项进位加法" 得到 题目分析:隔项进位意味着奇偶位置的数字互不影响,所以将奇偶位置 ...

  2. CF 1567 C. Carrying Conundrum(思维)

    CF 1567 C. Carrying Conundrum(思维) 题目大意: 题目大意很有意思,就是一个小孩他不会列式相加,把进位加到了该位左侧的第二位上,现在给出结果,问按照这个小孩的方法,能有多 ...

  3. Codeforces Round #742 (Div. 2) C. Carrying Conundrum

    目录 题目: Input Output Example 解析 AC代码 题目: C. Carrying Conundrum time limit per test2 seconds memory li ...

  4. Carrying Conundrum(思维)

    题目 Carrying Conundrum 问题描述 定义一种特殊加法计算: 上式为正常加法计算,下式为特殊加法计算,特殊之处在于进位将会跳跃一位相加, 比如应该进位到十位的1进位到了百位,应该进位到 ...

  5. Calculator Conundrum UVA - 11549(floyd判圈)

    Calculator Conundrum UVA - 11549 题意: 给你一个n和k. 每次操作可以把k平方,之后取k*k的前n位 为 k. 思路: 首先可以想到,经过有限次操作后,会出现循环. ...

  6. codeforces 1567 C. Carrying Conundrum

    本场比赛其他题目的题解 A. Domino Disaster B. MEXor Mixup C. Carrying Conundrum D. Expression Evaluation Error E ...

  7. UVA之11549 - Calculator Conundrum

    [题目] Problem C CALCULATOR CONUNDRUM Alice got a hold of an old calculator that can displayndigits. S ...

  8. C. Carrying Conundrum(思维)

    C. Carrying Conundrum(思维) 题意 小明不知道如何列竖式计算,每次计算将进位往左移了一位,要求算出存在多少对数对(a,b)使得其按照小明列竖式的方法能求出目标数字 以下是小明的计 ...

  9. Coprime Conundrum 容斥原理

    https://www.hackerrank.com/contests/hourrank-13/challenges/arthur-and-coprimes 我们可以枚举每一个p在[2, sqrt(n ...

  10. UVa 11549 Calculator Conundrum

    大白书里面的题感觉就是没有什么固定的思路,只能认真理解学习汝佳大大的代码. 这里用的Floyd判圈法,就像插图里面的一样,两个小孩,一个快一个慢,如果实在一个环形跑道,那么快的那个最终一定会" ...

最新文章

  1. 区块链BaaS云服务(35)亦笔科技ODRChain使用场景
  2. hadoop namenode启动不了_Hadoop框架:HDFS高可用环境配置
  3. BOI 2003 Problem. Spaceship
  4. 【线上圆桌 - 263】视频会议终端到终端的加密
  5. 简单表单提交php教程,PHP 表单数据提交与接收 超级简单《SSS教程 10》
  6. Mybatis中trim的使用
  7. 为什么不用小驼峰也能查到数据库数据_为什么不用驼峰命名创建表名和字段?...
  8. POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
  9. Java那些事之Log4j
  10. 如果开心,就跟着心走吧……
  11. war 包,在Windows环境,如何解压
  12. 简历制作-技术栈和项目经历如何写?
  13. 服务器搬迁方案_服务器搬迁方案
  14. 云计算机什么意思啊,什么叫云计算,云计算是什么,最通俗的解释是这样的
  15. mysql create 无法使用_[转载]mysqlcreate新建用户host使用%,本地无法连接原因及解决方法 WesTward...
  16. 移动网络怎么修改服务器地址,移动宽带怎么修改wifi密码?
  17. MySQL之Innodb引擎的4大特性
  18. Golang的单引号、双引号与反引号用法
  19. 转:据说什么都能查到网址大全
  20. 如何检验有调节的中介作用?

热门文章

  1. 用Caffe搭建自己的网络,并用图片进行测试
  2. Caffe学习:使用pycaffe绘制loss、accuracy曲线
  3. Tensorspace一款神奇的神经网络可视化应用
  4. Python使用hashlib模块生成给定文本数据的签名摘要信息(包括各种哈希函数)
  5. Java如何实现原子操作
  6. Canny边缘检测 原理python代码
  7. solr mysql安装教程_Solr安装使用教程
  8. java 按顺序读取文件夹_java读取某个文件夹下的所有文件实例代码
  9. 论文用impact、effect、influence 什么区别
  10. 查看docker run启动参数命令 runlike