HDU 5328 Problem Killer



Problem Description
   
   
   
   
You are a "Problem Killer", you want to solve many problems. Now you have n problems, the i -th problem's difficulty is represented by an integer ai ( 1ai109 ). For some strange reason, you must choose some integer l and r ( 1lrn ), and solve the problems between the l -th and the r -th, and these problems' difficulties must form an AP (Arithmetic Progression) or a GP (Geometric Progression). So how many problems can you solve at most? You can find the definitions of AP and GP by the following links: https://en.wikipedia.org/wiki/Arithmetic_progression https://en.wikipedia.org/wiki/Geometric_progression
 

Input
   
   
   
   
The first line contains a single integer T , indicating the number of cases. For each test case, the first line contains a single integer n , the second line contains n integers a1,a2,,an . T104,n106
 

Output
   
   
   
   
For each test case, output one line with a single integer, representing the answer.
 

Sample Input
   
   
   
   
2 5 1 2 3 4 6 10 1 1 1 1 1 1 2 3 4 5
 

Sample Output
   
   
   
   
4 6
 


简单题,把差和商处理计算好,求一个最长连续相等的就好了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
#include<string>
typedef long long ll;
using namespace std;
const ll maxn=1000005;
int T,n,m;
double a[maxn],b[maxn],c[maxn];

int main()
{
    scanf("%d",&T);
    while (T--)
    {
        scanf("%d",&n);
        for (int i=0;i<n;i++)
        {
            scanf("%lf",&a[i]);
            if (i) 
            {
                b[i]=a[i]-a[i-1];
                if (a[i-1]>1e-7) c[i]=a[i]/a[i-1];
            }
        }
        int l=1,r=1,ans=1;
        for (int i=2;i<n;i++)
        {
            if (b[i]==b[i-1]) l++; else l=1;
            if (c[i]==c[i-1]) r++; else r=1;
            ans=max(ans,max(l,r));
        }
        printf("%d\n",min(ans+1,n));
    }
}



Problem Description

    
    
    
    
You are a "Problem Killer", you want to solve many problems. Now you have n problems, the i -th problem's difficulty is represented by an integer ai ( 1ai109 ). For some strange reason, you must choose some integer l and r ( 1lrn ), and solve the problems between the l -th and the r -th, and these problems' difficulties must form an AP (Arithmetic Progression) or a GP (Geometric Progression). So how many problems can you solve at most? You can find the definitions of AP and GP by the following links: https://en.wikipedia.org/wiki/Arithmetic_progression https://en.wikipedia.org/wiki/Geometric_progression
 

Input
    
    
    
    
The first line contains a single integer T , indicating the number of cases. For each test case, the first line contains a single integer n , the second line contains n integers a1,a2,,an . T104,n106
 

Output
    
    
    
    
For each test case, output one line with a single integer, representing the answer.
 

Sample Input
    
    
    
    
2 5 1 2 3 4 6 10 1 1 1 1 1 1 2 3 4 5
 

Sample Output
    
    
    
    
4 6
 

你可能感兴趣的:(HDU)