书上具体所有题目:http://pan.baidu.com/s/1hssH0KO


代码:(Accepted,20 ms)

//UVa1594 - Ducci Sequence
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int T,N;
bool is_zero(vector<int> &d) {for (const auto &i : d)if (i) return false;return true;
}int main()
{//freopen("in.txt", "r", stdin);scanf("%d", &T);while (T--) {scanf("%d", &N);vector<int> D(N);for (auto &i : D) scanf("%d", &i);int i = -1;while (++i<200) {int D0 = D[0];for (int i = 0;i < N-1;++i)D[i] = abs(D[i] - D[(i + 1)]);D[N - 1] = abs(D[N - 1] - D0);if (is_zero(D)) break;}printf(i==200?"LOOP\n": "ZERO\n");}return 0;
}

题意:一个数组每次做一定变换,问最后他是循环了还是数据全都变成0了。


分析:模拟每一步,没什么思路。但是纯模拟量很大。
一开始我直接无限模拟每一步,看是不是全变成0了,还是有没有进入循环。
用了set来存储每一步的结果,用set的count函数来判断是不是进入循环了。代码如下:

//UVa1594 - Ducci Sequence
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
using namespace std;
int T,N;
bool is_zero(vector<int> &d) {for (const auto &i : d)if (i) return 0;return 1;
}int main()
{//freopen("in.txt", "r", stdin);scanf("%d", &T);while (T--) {scanf("%d", &N);vector<int> D(N);set<vector<int> > P;for (auto &i : D) scanf("%d", &i);P.insert(D);while (1) {vector<int> D2(N);for (int i = 0;i < N;++i)D2[i] = abs(D[i] - D[(i + 1) % N]);if (is_zero(D2)) { printf("ZERO\n"); break; }if (P.count(D2)) { printf("LOOP\n"); break; }D = D2;P.insert(D);}}return 0;
}

但是结果把我从椅子上吓得掉下去:“Time: 520 MS”!一口老血喷了出来(与上面最终提交的结果差了十万八千里!)。想了想,问题在哪里呢?于是去网上看了大神们的做法:他们都没有做数据是否循环的检查。原来如此,虽然set的检查已经很快了,但是如此庞大的检查量还是不敢恭维。直接不检查,1000次循环,要么出现全0,否则就是循环了,题目给你保证了不过1000的。现在知道了,原来还可以这么玩!
于是我又去除set的循环检查又提交一遍,100ms。那么与别人的40ms、50ms又差在哪儿呢?一看,人家只循环了500次甚至更少。为什么呢?我试了200,依然AC。想找点规律会不会保证它在200之内必有结果,没找出来。或许是题目的数据太水了原因。(本来猜想只要有一半的数字是一样的就应该是loop,想提交试试的,但是想想加个这样的判断并不合算)所以100ms差不多了。像我这样算是钻空子了。

转载于:https://www.cnblogs.com/xienaoban/p/6798093.html

[刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence相关推荐

  1. [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1589 #include<iostream> #incl ...

  2. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

  3. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  4. [刷题]算法竞赛入门经典(第2版) 4-3/UVa220 - Othello

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa 220 - Othello #include<iostream ...

  5. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  6. 算法竞赛入门经典(第二版)第三章习题

    声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...

  7. 刘汝佳《算法竞赛入门经典(第二版)》习题(三)

    刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...

  8. 刘汝佳《算法竞赛入门经典(第二版)》习题(六)

    刘汝佳<算法竞赛入门经典(第二版)>第四章习题(4-1~4-3) 习题4-1 象棋(Xiangai,ACM/ICPC Fuzhou 2011,UVa1589) 考虑一个象棋残局,其中红方有 ...

  9. 刘汝佳《算法竞赛入门经典(第二版)》习题(二)

    刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...

最新文章

  1. UML-如何使用层进行设计?
  2. RosBE生成ReactOS的VS2015工程失败2
  3. idea没有RunDashboard解决办法
  4. 大型网站后台架构的演变
  5. sap.m.list render initialization process
  6. 建立和使用Maven项目骨架Archetype
  7. 高职计算机及应用课程设置,高职计算机课程优化及整合
  8. 【Https】keytool 导入证书到 本地 Exception: Input not an X.509 certificate
  9. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
  10. swustoj堆排序算法(1015)
  11. LevelDB源码分析之四:AtomicPointer
  12. python 图像处理 书籍_清华大学出版社-图书详情-《深度学习技术图像处理入门》...
  13. Orcad allegro 安装补丁
  14. 轻松实现支付宝服务窗网页授权从配置到获取授权获取用户信息
  15. 联想拯救者常用快捷键
  16. layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...
  17. MySQL:Got error 139 from storage engine
  18. 快手直播前期怎么引流?快手新人主播怎么做涨粉
  19. 又发闪电贷价格操纵攻击?—— welnance.finance事件分析
  20. 学会学习3--选择恐惧症和收据控

热门文章

  1. GitHub入门详解
  2. ASP.NET画图全攻略(上)
  3. python 直方图每个bin中的值_使用python中的matplotlib进行绘图分析数据
  4. 梅森旋转产生随机数c语言实现,C++生成随机数的实现代码
  5. dcp9030cdn定影_兄弟Brother DCP-9030CDN打印机驱动(修复DCP-9030CDN打印机连接故障)V1.0 正式版...
  6. Java 并发编程之 Callable 和 Future
  7. Java 并发编程之 volatile
  8. 服务器系统bsd,BSD操作系统大盘点:其它BSD变体
  9. 怎么设置mysql 的权限_怎么设置SQL数据库用户权限
  10. linux接收网络数据并存存储,Linux网络设备驱动之数据接收流程(六)