YY's new problem
Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 3333 Accepted Submission(s): 941
Total Submission(s): 3333 Accepted Submission(s): 941
Problem 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.
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.
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
Source
Recommend
xubiao | We have carefully selected several similar problems for you:
3835
3831
3834
3828
3830
没想到最后却是暴力暴过去的
没想到最后却是暴力暴过去的
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define N 10010
using namespace std;
struct num
{
int l,r,sum;
}a[N*4];
int b[N],sum;
bool ch[N];
int main()
{
//freopen("data.in","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
}
memset(ch,false,sizeof(ch));
ch[b[1]] = true;
bool ans = false;
for(int i=2;i<=n;i++)
{
int val = b[i];
int r = val*2-1;
if(r>n)
{
r = n;
}
int l = val*2 - r;
if(l>r)
{
continue;
}
r = val-1;
for(int j=l;j<=r;j++)
{
int val1 = j;
int val2 = val*2-j;
if((ch[val1]&&!ch[val2])||(!ch[val1]&&ch[val2]))
{
ans = true;
break;
}
}
if(ans)
{
break;
}
ch[b[i]] = true;
}
if(ans)
{
printf("Y\n");
}else
{
printf("N\n");
}
}
return 0;
}