YY's new problem
Time Limit : 12000/4000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other)
Total Submission(s) : 32 Accepted Submission(s) : 15
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Given a permutation P of 1 to N, YY wants to know whether there exists such three elements P[i1], P[i2], P[i3] that
P[i1]-P[i2]=P[i2]-P[i3], 1<=i1<i2<i3<=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 i1, i2, i3 can be found, else 'N'.
Sample Input
2 3 1 3 2 4 3 2 4 1
Sample Output
N Y
hash里面不仅可以存1 还可以存元素的位置
不知道为什么我不能用以hash为名的数组
#include<iostream>
#define MAX 10005
int main()
{
using namespace std;
int p[MAX];
int yash[MAX];
int T,s,N;
cin>>T;
while(T--)
{
cin>>N;
for(int i=0;i<N;i++)
{
cin>>p[i];
yash[p[i]]=i;//把p[]“元素值”作为 hash[] 的“地址”(位置、索引),hash[] 的元素“值”存的是a[]的“元素序号”
}
int flag=0;
for(int i=0;i<N-1;++i)
{
for(int j=i+1;j<N;++j)
{
s=p[i]+p[j];
if(s%2!=0)
continue;
else
if(yash[s/2]>i&&yash[s/2]<j)
{
flag=1;
break;
}
}
if(flag)
break;
}
if(flag)
cout<<'Y'<<endl;
else
cout<<'N'<<endl;
}
}