ZOJ 2527题解
题目链接
题目的大概意思是给出一个序列,这个序列的数字都是整数,范围是-1,000,000,000 到1,000,000,000,数字的数量在2到1000,要求求出这个序列最长的等差子序列的长度。
我的想法,最长的相等的子序列作为maxlen的初始值,因为这个就是一个等差的子序列,然后把相同数字合并变为一个,这样可以减小数据量。
然后用排序一下,再用O(N*N*N)的复杂度求解,当然,这个可以做一些优化,当求最长等差子序列的时候,方法是先选定两个数字,得到这两个数字的差, 然后不断的求下一个数,通过map找这个数字,找到一个len加1,如果没找到直接跳出。
在这个地方我想应该还可以做一个优化,如果这两个数字已经被前面的等差序列找过的话就不用找了,比如2,3,4,5,当找2,3的时候,同时找过4,5 了,当找4,5的时候发现前面已经同时找过就不用再找下去了;另外,如果较大的一个数字后面的数字的个数已经小于maxlen了,就不用找了,但是这个优 化的效果不是很明显,于是就不做了。
我的代码速度比较慢,没有dp,其实就是死做的,0.46s通过,看看最快的是0.02s,还有很大的差距啊,附上代码:in C++
2 #include<cstdio>
3 #include<map>
4 #include<vector>
5 #include<cstdlib>
6 using namespace std;
7
8 int cmp(const void *a, const void *b)
9 {
10 int *t1, *t2;
11 t1 = (int *)a;
12 t2 = (int *)b;
13 return (*t1) - (*t2) ;
14 }
15 int main()
16 {
17 map<int ,int> m;
18 int num[1000];
19 int n;
20
21 while(scanf("%d",&n) != EOF)
22 {
23 int t = 0;
24 int maxlen = 0 ;
25 for(int i = 0 ; i < n ; i ++)
26 {
27 int temp;
28 scanf("%d",&temp);
29 if(!m[temp])
30 num[t++] = temp;
31 m[temp] ++ ;
32 if(maxlen < m[temp])
33 maxlen = m[temp] ;
34 }
35 qsort(num,t,sizeof(int),cmp);
36 for(int i = 0 ; i < t ; i ++)
37 for(int j = i + 1 ; j < t ; j ++)
38 {
39 int cur = num[j];
40 int len = 1 ;
41 int co = num[j] - num[i];
42 while(m[cur])
43 {
44 len ++ ;
45 cur += co ;
46 }
47 if(len > maxlen)
48 maxlen = len ;
49 }
50 printf("%d\n",maxlen);
51
52 }
53
54 return 0;
55 }
转载于:https://www.cnblogs.com/vivyli/archive/2010/02/05/1664063.html
ZOJ 2527题解相关推荐
- ZOJ 1410 题解
题目链接:http://acm.zju.edu.cn/show_problem.php?pid=1410 又是一道简单题,以前做过一次,结果放弃了,今天看了一下,觉得还是比较简单于是下手了. 题目的大 ...
- 2019山东省赛B - Flipping Game ZOJ - 4114 题解
题意: 初始有n个灯泡,灯泡状态是0和1,.现在有k轮操作,每次改变且仅改变m个的灯的状态,给定n盏灯的初始状态的最终状态,求有多少种解决改变灯的方案满足可以满足题目条件. 思路: 开始写的时候以为是 ...
- CONTINUE...? ZOJ - 4033
CONTINUE...? ZOJ - 4033 题解:先计算一下总数sum是否是偶数,如果不是则不能分出来,如果是则从后面开始分,先把人分到1.3组,分完sum / 2这些人,如果恰好能够分成零,那么 ...
- ZOJ Monthly,Feburary 2012 部分题解
题目链接:点击打开链接 ZOJ 3573 Under Attack 距离做这套题到写题解间隔比较久,题意有些忘了.. #include <iostream> #include <cs ...
- ZOJ Monthly, June 2014 月赛BCDEFGH题题解
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...
- ZOJ 3962 Seven Segment Display(数位DP)题解
题意:给一个16进制8位数,给定每个数字的贡献,问你贡献和. 思路:数位DP,想了很久用什么表示状态,看题解说用和就行,其他的都算是比较正常的数位DP. 代码: #include<iostrea ...
- ZOJ 2747 Paint the Wall(离散化+暴力)题解
题意:给你一个面,然后涂颜色,问你最后剩多少颜色,每种颜色面积. 思路:第一反应是二维线段树,代码又臭又长,可以做.但是这题暴力+离散化就可以过.可以看到他给的n只有100,也就是说最坏情况下会涂10 ...
- ZOJ 3829 Known Notation(贪心)题解
题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...
- ZOJ 3609 Modular Inverse(扩展欧几里得)题解
题意:求乘法逆元最小正正数解 思路:a*x≡1(mod m),则称x 是 a 关于 m 的乘法逆元,可以通过解a*x + m*y = 1解得x.那么通过EXGcd得到特解x1,最小正解x1 = x1 ...
最新文章
- apache与tomcat连接
- JS组件系列——开源免费图表组件:Chart.js
- 数论分块练习([CF830 C]Bamboo Partition + [hdu 6395]Sequence )
- ffmpeg处理RTMP流媒体的命令 发送流媒体的命令(UDP,RTP,RTMP)
- GitHub还是GitLab?谈谈两者的区别
- 20155229《网络对抗技术》Exp2:后门原理与实践
- xtrabackup备份还原的具体操作过程
- mysql limit 算法_MYSQL分页limit速度太慢
- 冰雪传奇刷怪计时器_冰雪传奇BOSS计时器
- Android优雅地判断软键盘弹出状态
- 干货 | Windows 10如何卸载新版Edge浏览器
- java省市区树_Java后台以树形结构返回省市区三级区域信息
- 计算机专业保研面试备考:概率论
- 计算机中丢失audiodsp,AudioDsp.dll(缺失AudioDsp.dll文件修复工具)V1.0 免费版
- el-select 远程搜索时 没有箭头图标
- 21天学会c++(英汉对照,个人翻译,水平有限,供参考)-------第2天
- 时间序列分析-针对时间序列的特殊方法
- siri 苹果语音控制功能
- python爬虫(爬取图片)
- DaVinci Resolve 17 mac新功能
热门文章
- Python使用sftp实现上传和下载功能(实例代码)
- [tensorflow]tensorflow 顺序模型(Sequential model)
- struts的工作原理
- 解剖 RxJava 之过滤操作符
- 互联网时代: 从Uber的供需匹配看开发需求
- C++的MFC 与 HTML 双向通讯
- Windows下AndroidStudio 中使用Git(AndroidStudio项目于GitHub关联)
- 支付宝接口调试经验总结
- objective-c(iOS5) 中weak和strong使用的区别
- Multiavatar 多元文化头像生成器