励志用少的代码做高效的表达。


题目(提交)链接→UVa-1594


本题为水题,因此侧重点从解题转变为优化。

注意点:

1、下一轮是按照上一轮的每个数做运算,但下一轮每次运算都会改变数列的值,造成运算不准确,我的做法是:事先拷贝一个数列b,用数列b的值做运算,而后赋值给a。
2、我判断0序列的方法是:用#include<algorithm>中的count()函数,如果0的数量等于数组长度,则输出zero。循环直接结束。这样可以避免出现全为0仍然继续运算的情况。提高效率

代码1:

#include<bits/stdc++.h>
using namespace std;
int main() {int n; cin >> n; while(n--) {             //n是序列个数 int m; cin >> m;                         //m是序列中元素数 int a[m+1], b[m+1]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b));      //a[m]存储元素,b[m]做拷贝 ,从1开始好循环 for(int i = 1; i <= m; i++) { cin >> a[i] ; b[i] = a[i]; } //输入a序列,拷贝b序列int num = 0;while(num++ < 1000) {                 //满1000次退出循环 for(int i = 1; i <= m; i++) a[i] = abs(b[i]-b[(i+m)%m+1]);   //取余。求绝对值 memcpy(b,a,sizeof(a));                //赋值 if(count(a+1,a+m+1,0) == m) {     //如果0在a中的个数=m,则说明全部置0。 cout << "ZERO" << endl;break;}}if(num == 1001) cout << "LOOP" <<endl;  //若遍历满1000次,说明是循环。 }return 0;
}

二刷:

初没有看全题目,还在想怎么判断循环节,结果发现在Input里最后一句给了限制:循环次数不超过一k。 厘清思路后AC

由于数组的值是单独存在的,那么判断更新后的数组是否与之前的重复,或它是全零数组时,按照正常的方法,就需要for循环判断,非常麻烦,也容易出错。

经过脑暴后, 想到用set<vector>来处理, 同时定义一个全零vector数组,如果set添加新值后size()不变,则代表出现LOOP(set自动去重), 如果新值等于全零数组(vector重载了+,==等运算符,很方便),则代表ZERO。提高效率,避免遍历一千次。

这次相对一刷有一个改进,在代码二的14行用了一个特判,避免定义两个数组互相赋值,整整降低了120MS的复杂度(汗!)

提交,AC。

看了看AC榜,竟然还有120MS过的,可惜他的代码没有share,看不到。希望大家以后在提交时都把代码share,我们互相学习共同进步

代码2:

#include<bits/stdc++.h>
using namespace std;
int main() {int T; cin >>T; while(T--) {int n; cin>> n; set<vector<int>>s;vector<int>temp;for(int i = 0; i < n; i++) {int x; cin>>x; temp.push_back(x);} //接下来是操作 vector<int>v(n, 0);           //定义0数组 while(1) {int a = temp[0];      //更新数组,由于temp[0]更新,所以用特判 for(int i=0; i< (n-1); i++) temp[i] = (abs(temp[i]-temp[(i+1)%n]));temp[n-1] = abs(a-temp[n-1]);int len1 = s.size();  //判断 s.insert(temp);if(len1+1 != s.size()) {cout << "LOOP" << endl; break;} else if(temp==v) {cout << "ZERO" << endl; break;}}}return 0;
}

日拱一卒,功不唐捐。

21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告相关推荐

  1. 12行代码AC——例题6-6 小球下落(Droppint Balls, UVa 679)——解题报告

    励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-679 题目大意: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下,如果开关打开,则落向该节点的右子树,如果开关关闭,则 ...

  2. 25行代码AC——习题5-7 打印队列(Printer Queue,UVa 12100)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-12100 题目描述: 我们需要用打印机打印任务.每个任务都有1~9间的优先级,优先级越高,任务越急. 打印机的运作方式:从打印队列里取出一 ...

  3. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVa-10763 本题为水题,因此侧重点由解题转向优化. 题意:判断第一列的数字是否与第二列的数字相同(乱序).解题方向多样,值得探究: 1.map哈希 ...

  4. 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-11988 题目大意: 输入一个字符串,输出在原本应该是怎么样的? 具体方法是: 若读取到'[', 则执行Home键:将光标移到行首. 若读 ...

  5. 21行代码AC——习题5-1 代码对齐(Alignment of Code, UVa1593)——解题报告

    题意: 输入若干行代码,要求各列单词的左边界对齐且尽量靠左,单词之间至少要空一格,每个单词不超过80个字符,每行不超过180个字符,一共最多1000行. 思路: 1.输入内容存入二维数组 2.找出每列 ...

  6. 21行代码AC——HDU1106 排序

    Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整 ...

  7. 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告

    励志用尽量少的代码做高效表达. 题目(提交)链接→UVa-1368 思路: DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加. 距离:重新遍历,录入出现次数比 ...

  8. 30行代码AC——例题6-3 矩阵链乘(Maxtrix Chain Multiplication, UVa 442)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-442 储备知识: 矩阵相乘次数: 如图:A矩阵*B矩阵得到C矩阵. C矩阵中元素个数=A矩阵行数*B矩阵列数.得到C矩阵中任意元素都需要运 ...

  9. 19行代码AC——例题 6-2 铁轨(Rails, UVa 514)——解题报告

    励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-514 此题的本质是:给出"入栈顺序",判断给定序列是否可以出栈. 有点像这种题: 因此思路也类似: 思路: 数组存储列 ...

最新文章

  1. hdu2236 无题II 最大匹配 + 二分搜索
  2. 中国肠道大会 | 日程及嘉宾
  3. 智能化的数据中心到底该如何建设?
  4. 技术开发人员适应其他部门提需求的一个经验
  5. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
  6. hbase系统架构图以及各部分的功能作用,物理存储,HBase寻址机制,读写过程,Regin管理,Master工作机制
  7. 【Flask模板】include标签
  8. Java中对数组的排序方法总汇分析
  9. MapReduce 示例:减少 Hadoop MapReduce 中的侧连接
  10. Spring 整合 Redis
  11. python 实现Hadoop的partitioner和二次排序
  12. oracle Rac的心跳线不支持交叉线?
  13. Dev-C++的下载和安装
  14. VMware与xshell安装教程
  15. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1160/1170)...
  16. echarts 乡镇级地图制作办法
  17. html项目符号正方形,html – 列表项下的项目符号
  18. opencv读取16位色深图片
  19. 拿下Facebook黑客杯四冠王!与Jeff Dean相提并论...ACM竞赛之神的传奇前半生
  20. TapTap物理画线游戏,使用Unity实现2D物理画线功能

热门文章

  1. python之多线程编程(一):基本介绍
  2. Netty学习笔记(五)Pipeline
  3. Github 开源了新型肺炎防疫项目,助力抗击疫情!
  4. 多线程小抄集(新编三)
  5. 每日一道算法题-寻找丑数
  6. JavaScript基本语法(续)
  7. 2022 WebRTC发展趋势分析
  8. Firefox年内将默认启用AV1解码
  9. 化繁为简 - 腾讯计费高一致TDXA的实践之路
  10. SecureCRT如何进入和退出全屏及调出菜单栏