首页 > 其他分享 >CF1335E1 Three Blocks Palindrome (easy version)

CF1335E1 Three Blocks Palindrome (easy version)

时间:2023-08-23 14:33:09浏览次数:38  
标签:Palindrome Blocks int CF1335E1 Three 27 res

思路

发现一个进阶回文序列仅包含三个部分:\(x\) 个连续的 \(a\),\(y\) 个连续的 \(b\),\(x\) 个连续的 \(a\)。

对于一个 \(a\),我们一定会取最外面的两个 \(a\),如果不取,则答案一定不小或不变,所以我们枚举到 \(a\) 的时候,一定是确定了最外围的两个 \(a\) 的位置。

接下来再枚举 \(x\) 并算出最内层的 \(a\) 的位置,统计这两个位置之间其他数字的最大个数,也就是 \(y\) 然后更新答案即可。

可提前用 vector 储存每个数字出现的位置,用前缀和统计 \([1,i]\) 中某个数字出现的次数。

AC code

#include<bits/stdc++.h>
using namespace std;
int T,n,a[2005],ans,num[2005][27],res;
vector<int>v[27];
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		for(int i=1;i<=26;++i) v[i].clear();
		memset(num,0,sizeof(num));
		scanf("%d",&n),ans=1;//答案至少为1
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=26;++j) num[i][j]=num[i-1][j];
			scanf("%d",&a[i]),v[a[i]].push_back(i),++num[i][a[i]];//前缀和统计出现次数
		}
		for(int i=1;i<=26;++i)
			if(v[i].size()>1)
			{
					res=0;
					for(int j=0;j<=(int)ceil(1.0*(v[i].size()-2)/2);++j)//枚举x
					{
						int l=v[i][j],r=v[i][v[i].size()-j-1];//找到最中间两个的位置
						if(l==r) ans=max(ans,res+1);//如果一样,则没有y,直接更新答案
						else
						{
							res+=2;
							for(int k=1;k<=26;++k) if(k!=i) ans=max(ans,res+num[r-1][k]-num[l][k]);//枚举每个数字作为b的情况,并更新答案
						}
					}
			}
		printf("%d\n",ans);
	}
	return 0;
}

标签:Palindrome,Blocks,int,CF1335E1,Three,27,res
From: https://www.cnblogs.com/One-JuRuo/p/17651550.html

相关文章

  • 使用 KubeBlocks 为 K8s 提供稳如老狗的数据库服务
    原文链接:https://forum.laf.run/d/994大家好!今天这篇文章主要向大家介绍Sealos的数据库服务。在Sealos上数据库后端服务由KubeBlocks提供,为用户的数据库应用保驾护航。无论你是在公有云还是本地环境中使用,Sealos都能为你管理关系数据库、NoSQL、向量数据库和流数据库等......
  • Google开源了可视化编程框架Visual Blocks for ML
    VisualBlocksforML是一个由Google开发的开源可视化编程框架。它使你能够在易于使用的无代码图形编辑器中创建ML管道。为了运行VisualBlocksforML。需要确保你的GPU是可以工作的。剩下的就是clone代码,然后运行,下面我们做一个简单的介绍:VisualBlocksforML是运行在支持jav......
  • codeblocks配置分别打开工程项目
    codeblocks配置分别打开工程项目背景工作中用到codeblocks,但是打开不同项目都在同一个codeblocks里面,及其不方便,想配置成vscode那样,一个工程打开一个ide配置把相应位置的勾选去掉,重新打开codeblocks,设置成功setting->environment......
  • 解决codeblocks不显示控制台,printf打印不显示。
    在代码中手动创建一个控制台,增加一下代码: #include<stdio.h>#ifWIN32intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRszCmdLine,intnCmdShow)#elseintmain(intargc,char**argv)#endif//WIN32{//分配控制台窗口AllocC......
  • codeblocks 配置SDL2、SDL2_image,找不到SDL2/SDL.h SDL.h SDL_image.h
    codeblocks配置SDL2、SDL2_image下载https://github.com/libsdl-org/SDL/releases/https://github.com/libsdl-org/SDL_image/releases1.解压将SDL2_image-devel-2.6.3-mingw.zip里面x86_64-w64-mingw32的lib、bin、include对应文件解压到SDL2-devel-2.28.2-mingw.zip\SDL2-......
  • P1217 [USACO1.5] 回文质数 Prime Palindromes
      打表先把一到一亿的质数兼回文数打出来。(用文件输入输出会方便复制一些)最后效果如下:太长故折叠 0,2,3,5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,1......
  • 【刷题笔记】9. Palindrome Number
    题目Determinewhetheranintegerisapalindrome.Aninteger is a palindromewhenit readsthesamebackwardasforward.Example1:Input:121Output:trueExample2:Input:-121Output:falseExplanation:Fromlefttoright,itreads-121.Fromrightto......
  • STM8S编译错误unable to allocate space for sections/blocks with a total
    STM8S编译错误unabletoallocatespaceforsections/blockswithatotal#欢迎使用Markdown编辑器笔者用IARforSTM8开发碰到很多奇怪的问题,都是因为优化等级引起的首先看这个用dubug编译错误提示:unabletoallocatespaceforsections/blockswithatotalestimatedm......
  • 云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事
    像是NebulaGraph这类基础设施上云,通用的方法一般是将线下物理机替换成云端的虚拟资源,依托各大云服务厂商实现“服务上云”。但还有一种选择,就是依托云数据基础设施,将数据库产品变成为云生态的一环,不只是提供自身的数据云服务,还能同其他的数据库一起分析挖掘业务数据价值。在本......
  • [未解决] vue transform-blocks解析源代码报错:Illegal tag name. Use '<' to print '<
    报错内容:[vite]Internalservererror:Illegaltagname.Use'<'toprint'<'.用的是这篇博文的源代码展示方法:如何用vite的vueCustomBlockTransforms(自定义块转换)实现源代码展示使用时突然遇到某一个vue文件添加<demo></demo>标签后报错,但其他vue文件可以正常读取和展示......