HDU5328.Problem Killer
2015-07-30 20:02
417 查看
题解:
首先如果a,b,c是等差数列,且b,c,d也是等差数列,那么a,b,c,d也是等差数列,这个结论等于等比数列也成立,所以只要对于每个i(i+2
首先如果a,b,c是等差数列,且b,c,d也是等差数列,那么a,b,c,d也是等差数列,这个结论等于等比数列也成立,所以只要对于每个i(i+2
[code]#include <map> #include <set> #include <stack> #include <queue> #include <cmath> #include <ctime> #include <vector> #include <cstdio> #include <cctype> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define inf -0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define mem(a, b) memset(a, b, sizeof(a)) typedef long long ll; const int maxn=1e6+10; int a[maxn]; int main(){ int t; int n; //freopen("1002.in","r",stdin); //freopen("1001.out","w",stdout); scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); if(n==1){ printf("1\n"); continue; } int ans=1; for(int i=0;i<n;){ int count1=2; if((i+2)<n&&a[i]+a[i+2]==2*a[i+1]) while((i+2)<n&&a[i]+a[i+2]==2*a[i+1]){ i++; count1++; } else i++; ans=max(count1,ans); } for(int i=0;i<n;){ int count1=2; if((i+2)<n&&(ll)a[i]*a[i+2]==(ll)a[i+1]*a[i+1]) while((i+2)<n&&(ll)a[i]*a[i+2]==(ll)a[i+1]*a[i+1]){ i++; count1++; } else i++; ans=max(count1,ans); } printf("%d\n",ans); } return 0; }
相关文章推荐
- A星算法地图编辑器
- Odoo HRMS应用简介
- SGU 456 Annuity Payment Scheme
- 求方程解问题
- hdoj 1072 Nightmare
- BAPI_NETWORK_COMP_CHANGE
- nyoj 23 取石子(一)【博弈论】
- Elasticsearch、MongoDB和Hadoop比较
- 黑皮书演习 更新
- win10怎么取消登录密码
- 浏览器引擎
- [BZOJ1015][JSOI2008]星球大战starwar
- BAPI_NETWORK_COMP_ADD
- Leetcode #240 Search a 2D Matrix II
- tkinter菜单笔记=>持续更新
- 冒泡排序的三种实现
- PAT IO-03 整数均值
- Odoo电子数据交换(EDI)
- 中国大陆开源镜像站汇总
- poj1061青蛙那啥,第一次弄欧几里德,各种问题各种请教