题解CF1063A
题目传送门。建议没WA过本题的点一下。
题目非常简单,就是用有限的字符构造一个回文字串最多的字符串。
啥?你问我回文是什么?出门右转百度一下。
回文,意味着一个序列共有
但是,和子序列不同,字串必须是连续的!
那我们用样例举个例?
众所周知,它共有
但如果我们把它变成
那我们考虑特殊情况:
这种情况一定有奇数个字符且只有两种;第
这种情况下,回文子串的数量
然而,这种情况受限:第一不得有多于两种字符;第二必须有奇数个字符。
那我们能否考虑到第二种特殊情况??
这种情况的回文子串数量为:
设
因为
这个公式怎么推出来的呢?
首先,对于一个有
因为子串必须连续,所以只有
而我们的子串数量,总长度为
而按照数列求和公式,结果应该是:
所以,能够求出如上的公式。
那么……我们去求解,但还差一步:
样例输出:
按此方法:
样例输出:
按此方法:
我们这时已经证明了此方法是正确的,那么我们就——上代码!
#include<bits/stdc++.h>
using namespace std;
char s[100001];
int main(){
int n;
cin>>n>>s;
sort(s,s+n,cmp);
cout<<s;
return 0;
}
(没错就这么简单)
其实很多人都没想到,
无论你是从大到小,还是从小到大,都不影响,只要相同的两个字符在一起,就一定会得到最大值。
类似于桶排序的去重,最后输出几个数,从大到小枚举还是从小到大枚举不重要。
输入,排序,输出,结束。
时间复杂度
可通过本题。
感谢各位在评论区
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】