当前位置:编程学习 > C/C++ >>

hdu 3833

暴力,有技巧,确定a[i2]的值,先从0~i2找a[i1]的值来计算a[i3]的值,当i2>n/2时,从i2~n-1找a[i3]的值来计算a[i1]的值

 

[cpp]
#include<stdio.h>  
int hash[10010],a[10010]; 
int main() 

    int i,j,n,t,k,flag; 
    scanf("%d",&t); 
    while(t--) 
    { 
        flag=0; 
        scanf("%d",&n); 
        for(i=0;i<n;i++) 
        { 
            scanf("%d",&a[i]); 
            hash[a[i]]=i; 
        } 
        for(i=1;i<n/2;i++) 
        { 
            for(j=0;j<i;j++) 
            { 
                k=2*a[i]-a[j]; 
                if(k<=0||k>n)continue; 
                if(hash[k]>i) 
                {flag=1;break;} 
            } 
            if(flag==1)break; 
        } 
        for(i;i<n-1;i++) 
        { 
            for(j=i+1;j<n;j++) 
            { 
                 k=2*a[i]-a[j]; 
                 if(k<=0||k>n)continue; 
                if(hash[k]<i) 
                {flag=1;break;} 
            } 
            if(flag==1)break; 
        } 
        if(flag==1) 
            puts("Y"); 
        else puts("N"); 
    } 
    return 0; 

#include<stdio.h>
int hash[10010],a[10010];
int main()
{
 int i,j,n,t,k,flag;
 scanf("%d",&t);
 while(t--)
 {
  flag=0;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
   scanf("%d",&a[i]);
   hash[a[i]]=i;
  }
  for(i=1;i<n/2;i++)
  {
   for(j=0;j<i;j++)
   {
    k=2*a[i]-a[j];
    if(k<=0||k>n)continue;
    if(hash[k]>i)
    {flag=1;break;}
   }
   if(flag==1)break;
  }
  for(i;i<n-1;i++)
  {
   for(j=i+1;j<n;j++)
   {
     k=2*a[i]-a[j];
     if(k<=0||k>n)continue;
    if(hash[k]<i)
    {flag=1;break;}
   }
   if(flag==1)break;
  }
  if(flag==1)
   puts("Y");
  else puts("N");
 }
 return 0;
}


 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,