首页 > 其他分享 >Codeforces Global Round 25 E

Codeforces Global Round 25 E

时间:2024-04-09 17:37:06浏览次数:20  
标签:25 return int Global Codeforces else flag 拉车

链接

其实还是很好写的。
其实很明显,手玩一下就可以发现只用1次或者两次就可以分完,否则就是以下3中情况。

  1. aaaaaa
  2. aaabaaa
  3. abababa

这个证明很简单。难在怎么想。其实就是手玩以下,看看怎么样分不了,然后就可以了。样例具有一定的迷惑性,还是很好解决的。
然后马拉车数组清空要清到N+2,我的是这样,因为while找的时候会涉及到后面的数字,也可以加个特判。这个问题导致我赛时wa了8发做不出来。哎,也是因为马拉车是网上的板子的原因吧。

好吧其实后面的才是最大的原因。然后跑完马拉车是可以O(1)判断任意连续子串是否为回文串的,这个需要注意。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
	char c=getchar();int a=0,b=1;
	for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
	for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;return a*b;
}
int dp[2000501];//注意数组大小
char str[2000501],s[2000501];
int odd[2000501],even[2000501];
int len,N;
bool cherk(int l,int r)
{
	int mid=l+r>>1;
	if((r-l+1)%2==0)
	{
		if(odd[mid]>=(r-l+1))return 1;
		else return 0;
	}
	else
	{
		if(even[mid]>=(r-l+1))return 1;
		else return 0;
	}
} 	
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int T=read();char c1;
	for(int t=1;t<=T;t++)
	{
		for(int i=0;i<=N;i++)
		{
//			str[i]=s[i]=0;
			dp[i]=0;
			odd[i]=even[i]=0;
		}
		for(int i=0;i<=N+2;i++)str[i]=0;
		N=0,len=0;
		scanf("%s",s+1);
		if(t==1)c1=s[1];
	    int N=0,len=strlen(s+1);
	    bool flag=0;dp[1]=dp[0]=0;
	    for(int i=2;i<=len;i++)
	    {
	    	if(len%2==1&&(i==(1+len>>1)))continue;
	    	if(s[i]!=s[1])flag=1;
		}
		if(s[1]!=s[len])flag=1;
		if(flag==0)
		{
			cout<<"No"<<endl;
			continue;
		}
	    for(int i=1;i<=len;i++)
	    {
	    	dp[i]=0;
		}
	    str[0]='$';//防止越界
	    for(int i=1;i<=len;i++)
		{
	        str[++N]='#';
	        str[++N]=s[i];
	    }
	    str[++N]='#',str[++N]='@';//最后再加一个@
	    int right=0,pos=0;
	    for(int i=1;i<=N;i++)dp[i]=0;
	    for(int i=1;i<=N;i++){
	        if(i<right)
	            dp[i]=min(dp[2*pos-i],right-i);
	        else
	            dp[right=i]=1;
	        while(str[i-dp[i]]==str[i+dp[i]])
	            dp[i]++;
	        if(i+dp[i]>right)
	            right=i+dp[i],pos=i;
	    }
	    int ret=0;
	    for(int i=1;i<=N;i++)
	        ret=max(ret,dp[i]-1);//找最长回文
	    for(int i=1;i<=N;i++)
	    {
	    	if(i%2==1)
	    	{
	    		odd[i/2]=dp[i]-1;
			}
			else
			{
				even[i/2]=dp[i]-1;
			}
		}
	    if(ret!=len)
	    {
	    	cout<<"Yes"<<endl;
	    	cout<<1<<endl;
	    	for(int i=1;i<=len;i++)
			{
				cout<<s[i];
			}
			cout<<endl;
	    	continue;
		}
		flag=0;
		for(int i=2;i<len;i++)
		{
			if(s[i+1]!=s[i-1])flag=1;
		}
		if(flag==0)
		{
			cout<<"No"<<endl;
			continue;
		}
		int mid=0;
		for(int i=2;i<len;i++)
		{
			if(cherk(1,i)==0&&cherk(i+1,len)==0)
			{
				mid=i;
				break;
			}
		}
		if(mid==0)
		{
			cout<<"No"<<endl;
			continue;
		}
		cout<<"Yes"<<endl;
		cout<<2<<endl;
//		}
		for(int i=1;i<=mid;i++)
		{
			cout<<s[i];
		}
		cout<<' ';
		for(int i=mid+1;i<=len;i++)
		{
			cout<<s[i];
		}
		cout<<endl;
	}
	return 0;
}
/*
1
aabaaabaa

aababaa

1
aaabaaa
*/

标签:25,return,int,Global,Codeforces,else,flag,拉车
From: https://www.cnblogs.com/HLZZPawa/p/18124393

相关文章

  • EG25H4偏微分方程的解决方案
    EG25H4–CA2–偏微分方程的解决方案学生应独立准备解决指定问题的方案问题。提交的稿件,连同抄袭封面,应上传至2024年4月19日(星期五)下午5点(英国夏令时)前抵达MyAberdeen。请注意在截止日期后收到的未经授权的提交文件将受到逾期罚款,因为根据大学关于未经授权逾期提交的处罚政策课程。......
  • openGauss 支持global-syscache
    支持GlobalSysCache可获得性本特性自openGauss3.0.0版本开始引入。特性简介全局系统缓存(GlobalSysCache)是系统表数据的全局缓存和本地缓存。原理如图1所示。图1GlobalSysCache原理图客户价值全局系统缓存特性可以降低数据库进程的缓存内存占用,提升数据库的并发扩展......
  • REXROTH力士乐R900579496 VT5025-1X/
    REXROTH力士乐R900579496VT5025-1X/R901057058VT-VRPA1-150-1X/V0/0是力士乐(Rexroth)生产的一种电子比例阀放大器,它用于提高液压系统中比例阀的性能。以下是该产品的一些关键特点:比例控制:VT-VRPA1-150-1X/V0/0提供精确的比例控制功能,允许用户根据输入信号调整输出流量,实现......
  • Miktrotron MC2588相机配置
    MC2588大面阵相机MC2588测试CoaXPress测试该相机在Hello-FPGACoaXPress系统中工作状态良好。WIN10PCIeGen3x8KU040FPGAHello-FPGA2.0FMCHOSTCard......
  • [ABC254D] Together Square--分解质因数。
    [ABC254D]TogetherSquare-洛谷 #include<bits/stdc++.h>#defineintlonglong//(有超时风险)#definePIIpair<int,int>#defineendl'\n'usingnamespacestd;constintN=2e5+10,M=1e3+10;inta[N],pre[N];signedmain(){std::io......
  • 2024.3.25(周一)总结
    完成python作业6-1使用函数输出指定范围内Fibonacci数的个数本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,fib(0......
  • 张宇25版本没24版本讲得好?怎么办?
    很多同学反映:25版,讲得太散了。前几讲听得很舒服,积分之后开始觉得难。bilibili评论区有些基础差的同学,有点摸不着头绪:另一些基础差的同学,听课觉得能消化,只是容易遗忘:(也可能是不知道自己不知道)但用知能行AI教练一测,发现太多薄弱点:以为自己会了,其实都没会。“我......
  • Drools业务规则管理系统25_WorkBench8
    一、WorkBench简介Workbench是KIE组件中的元素,也称为KIE-WEB,是Drools-WB与JBPM-WB的结合体,它是一个可视化的规则编辑器。Workbench功能十分强大,不仅提供一系规则编辑器,还可以编辑JavaBean。WorkBench其实就是一个war包,安装到tomcat中就可以运行。使用WorkBench可以在浏览器......
  • Drools业务规则管理系统25_Spring整合Drools7
    一、Spring简单整合Drools在项目中使用Drools时往往会跟Spring整合来使用。具体整合步骤如下:1、创建maven工程drools_spring并配置pom.xml2、创建规则目录/resources/rules,rules目录中创建规则文件helloworld.drl3、创建Spring配置文件/resources/spring.xml......
  • SiT8008BI-22-33E-50.000000D 标准时钟振荡器 3225 50MHz SiTime
    SiT8008BI-22-33E-50.000000D是SiTime公司出产的一款振荡器产品的类型。SiTime是一家专心于供给高性能、高精度、低功耗的振荡器解决方案的公司。是SiTime公司出产的一款振荡器产品的类型。SiTime是一家专心于供给高性能、高精度、低功耗的振荡器解决方案的公司。制造......