Codeforce 1324B Yet Another Palindrome Problem
题目:
题目大意:
给你一串数,他含有元素大于等于3的子列如果是回文的那么就输出YES
题目分析:
只要原来的数列中,有不相邻的两个元素相等就可以
AC代码:
//https://codeforces.com/problemset/problem/1324/B
#include<stdio.h>
#include<stdlib.h>
#include<cmath>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int a[5005],t,n,ans=0;
int main(){
scanf("%d",&t);
while(t--){
int n,ans=0;
scanf("%d",&n);
for(int i = 0;i<n;i++)
scanf("%d",&a[i]);
for (int i=0;i<n;i++){
for(int j = i+2;j<n;j++){
if(a[i]==a[j]){
ans = 1;
break;
}
}
if(ans)
break;//找到一个就可以了
}
if(ans)
printf("YES\n");
else
printf("NO\n");
}
}
再看看大佬们的优质代码
大佬的博客在这里
比起我这暴力扫,大佬的结构体和卡区间的方法更为方便。并且对于边界的处理,再a[0]和a[n+1]的位置设置永远可能和数列中数相等的数,十分巧妙。