HDU 5328 Problem Killer(2015多校联合)
2015-07-31 19:37
323 查看
题目链接
戳我题目大意
一个序列 \(a\), 求这个序列的 连续子序列 中最长的等差序列或者等比序列样例解释
2// T
5//n
1 2 3 4 6//n个数, 1,2,3,4是最长等差序列,长度为4
10//n
1 1 1 1 1 1 2 3 4 5//前6个1满足等差(比)序列,且长度最长是6
解题思路
暴力查询即可此题坑点: 等比序列 的 公比 可能时 分数.
代码
//Author LJH //www.cnblogs.com/tenlee #include <cstdio> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #define clc(a, b) memset(a, b, sizeof(a)) using namespace std; const int inf = 0x3f; const int INF = 0x3f3f3f3f; const int maxn = 1e6+5; const double eps = 1e-6; int n; double a[maxn]; int main() { int T; scanf("%d", &T); while(T--) { scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%lf", &a[i]); } double ap = a[1] - a[0]; double gp = a[1] / a[0]; int len1 = 1, len2 = 1; int malen1 = 1, malen2 = 1; for(int i = 1; i < n; i++) { if(abs(a[i] - a[i-1] - ap) < eps) len1++; else { ap = a[i] - a[i-1]; len1 = 2; } malen1 = (malen1 > len1 ? malen1 : len1); if(abs(a[i] / a[i-1] - gp) < eps) len2++; else { gp = a[i] / a[i-1]; len2 = 2; } malen2 = (malen2 > len2 ? malen2 : len2); } printf("%d\n", malen1 > malen2 ? malen1 : malen2); } return 0; }
相关文章推荐
- HDU 1016 素数环(DFS)
- POJ 1611 The Suspects (并查集)
- HDU-2187-悼念512汶川大地震遇难同胞——老人是真饿了
- c++中dynamic_cast的用
- poj 2236 Wireless Network(并查集)
- Error/Exception-01-hibernate(jar包冲突)--javax.persistence.OneToMany.orphanRemoval()Z异常
- linux服务器可以ping通,但是访问不了--Ip地址:端口--
- ACM
- S3C2440 framebuffer编程
- java中注解的使用与实例 (二)
- CS224d lecture 8札记
- Struts2中Theme与Template
- Leetcode #79 Word Search
- AutoConfig工具使用指南(转载)
- hdu 1695 GCD 莫比乌斯反演
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- DP+矩阵快速幂 HDOJ 5318 The Goddess Of The Moon
- mysql的使用和sql语言的学习
- WINDOWS多线程-事件
- VMware之——安装CentOS6.5后无法连接网络的解决方案