比赛 2025暑期集训第2场 评测结果 WWWWWWWWTWTTTTWTTWTW
题目名称 等差子序列 最终得分 0
用户昵称 左清源 运行时间 2.204 s
代码语言 C++ 内存使用 3.84 MiB
提交时间 2025-06-29 17:26:08
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,a[N],l[N],r[N];
void clear(){
	for(int i=1;i<=n;i++)l[i]=r[i]=0;
}
bool check(int k){
	l[a[1]]++;
	for(int i=3;i<=n;i++)r[a[i]]++;
	for(int i=2;i<=n-1;i++){
		if(a[i]<=k||a[i]+k>n)continue;
		if((l[a[i]-k]&&r[a[i]+k])||(l[a[i]+k]&&r[a[i]-k]))return 1;
		else l[a[i]]++,r[a[i+1]]--;
	}
	return 0;
}
void work1(){
	if(n<3){
		printf("N\n");
		return;
	}
	for(int i=1;i<=n;i++)scanf("%d",a+i);
	for(int i=1;i<=n/2;i++){
		clear();
		if(check(i)){
			printf("Y\n");
			return;
		}
	}
	printf("N\n");
	return;
}
void work2(){
	for(int i=1;i<=500;i++){
		clear();
		if(check(i)){
			printf("Y\n");
			return;
		}
	}
	for(int i=n;i>=n-500;i--){
		clear();
		if(check(i)){
			printf("Y\n");
			return;
		}
	}
	printf("N\n");
	return;
}
int main(){
	freopen("sequence.in","r",stdin);
	freopen("sequence.out","w",stdout); 
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		if(n<=1000)work1();
		else work2();
	}
	return 0;
}