Submit
Status
Practice
HDU 3833
Description
Given a permutation P of 1 to N, YY wants to know whether there exists such three elements P[i 1], P[i 2], P[i 3] that
P[i 1]-P[i 2]=P[i 2]-P[i 3], 1<=i 1<i 2<i 3<=N.
Input
The first line is T(T<=60), representing the total test cases.
Each test case comes two lines, the former one is N, 3<=N<=10000, the latter is a permutation of 1 to N.
Output
For each test case, just output 'Y' if such i 1, i 2, i 3 can be found, else 'N'.
Sample Input
2
3
1 3 2
4
3 2 4 1
Sample Output
N
Status
Practice
HDU 3833
Description
Given a permutation P of 1 to N, YY wants to know whether there exists such three elements P[i 1], P[i 2], P[i 3] that
P[i 1]-P[i 2]=P[i 2]-P[i 3], 1<=i 1<i 2<i 3<=N.
Input
The first line is T(T<=60), representing the total test cases.
Each test case comes two lines, the former one is N, 3<=N<=10000, the latter is a permutation of 1 to N.
Output
For each test case, just output 'Y' if such i 1, i 2, i 3 can be found, else 'N'.
Sample Input
2
3
1 3 2
4
3 2 4 1
Sample Output
N
Y
题意:要找出满足条件p1-p2=p2-p3的数,如果有 就输出YES 否则NO。
PS:首先由题p2=(p1+p3)/2;p1+p3必为偶数;
#include <stdio.h>
#include <string.h>
int a[55555],hash[55555];
int main()
{
int i,j,n,t,sum;
scanf("%d",&t);
while(t--)
{
int flag=0;
memset(hash,0,sizeof(hash));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
hash[a[i]]=i;//用下标来重新标记输入过的数
}
for(i=0;i<n-1;i++)
for(j=i+2;j<n;j++)
{
sum=a[i]+a[j];
if(sum%2!=0) //如果是奇数直接continue;
continue;
else
{
if(hash[sum/2]>i&&hash[sum/2]<j)
{
flag=1;
break;
}
}
}
if(flag==1)
printf("Y\n");
else
printf("N\n");
}
}