E2. Three Blocks Palindrome (hard version) (贪心&暴力)

E2. Three Blocks Palindrome (hard version) (贪心&暴力)

题目传送门

思路:

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		vector<vector<int> >a(201,vector<int>(n+1));
		vector<vector<int> >p(201);//储存每个数的位置. 
		for(int i=1,x;i<=n;i++)
		{
			scanf("%d",&x);
			for(int j=1;j<=200;j++) //前缀和 
				a[j][i]=a[j][i-1]+(x==j);
			p[x].push_back(i);
		}
		int ans=0;
		for(int k=1;k<=200;k++){ //O(n*200*200) 
				ans=max(ans,(int)p[k].size());//如果只取一个子串. 
			for(int i=1;i<=(p[k].size()/2);i++)//左右对称贪心思想. 
			{
				  int l=p[k][i-1]+1,r=p[k][p[k].size()-i]-1;//找到区间[l , r] 
				  for(int j=1;j<=200;j++) //取最大值. 
				  {
				  		int x=a[j][r]-a[j][l-1];
				  		ans=max(ans,i*2+x);
				  }
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
全部评论

相关推荐

安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务