zoukankan      html  css  js  c++  java
  • Codevs 1283 等差子序列

    1283 等差子序列

     

    2010年

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 大师 Master
     
     
     
    题目描述 Description

    给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len>=3),使得 Ap1,Ap2,Ap3,…ApLen 是一个等差序列。

    输入描述 Input Description

    输入的第一行包含一个整数 T,表示组数。

     下接 T 组数据,每组第一行一个整数 N,每组第二行为一个 1 到 N 的排列, 数字两两之间用空格隔开。

    输出描述 Output Description

    对于每组数据,如果存在一个等差子序列,则输出一行“Y”,否则输出一 行“N”。

    样例输入 Sample Input

    2

    3

    1 3 2

    3

    3 2 1

    样例输出 Sample Output

    N

    Y

    数据范围及提示 Data Size & Hint

    对于5%的数据,N<=100,对于30%的数据,N<=1000,对于100%的数据,N<=10000,T<=7

    /*
        从数列中O(n)找一个mid,枚举他前面的每个数,记录下差
        再枚举mid后面的数,如果差记录过,则存在等差数列
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn=10010;
    int T,n,a[maxn];
    int vis[maxn<<4];
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            bool flag=0;
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=2;i<=n;i++){
                for(int j=1;j<i;j++)
                    vis[a[i]-a[j]+10010]=i;
                for(int j=i+1;j<=n;j++){
                    if(vis[a[j]-a[i]+10010]==i)flag=1;
                    if(flag)break;
                }
                if(flag)break;
            }
            if(flag)printf("Y
    ");
            else printf("N
    ");
        }
    }
    75分 O(n2)暴力
  • 相关阅读:
    uva 10370
    uva 10107
    uva 10038
    uva 488
    伪代码格式
    公众号的秘密,知道一个biz就够了
    ToolTip 概述
    swt
    Java GUI图形界面开发工具
    Java多线程-两个小球
  • 原文地址:https://www.cnblogs.com/thmyl/p/7308928.html
Copyright © 2011-2022 走看看