Japanese Student Championship 2021

在2021年日本学生锦标赛中,作者快速完成前四题,但在E题上遇到挑战。E题涉及到二级回文串的性质,通过分析发现需要考虑字符串拆分后的回文条件,以及使用并查集优化解决方案。虽然作者对自己的表现感到满意,但也意识到在解决复杂问题上的不足。
摘要由CSDN通过智能技术生成

考试情况

前四题用了20分钟全部A掉
就开始自闭的过程
做完以后看了眼排行榜,发现F题做出来的人其实比E题做出来的人还多
自己审了一遍题,对E题其实也没什么思路,就跳过,去搞F了,因此自闭了一个半小时,只打出来了一个暴力,其他就不会搞了

总结

自我感觉非常好,手速和脑速同时在线,最起码就前四题而言,对自己非常满意了
但还是缺乏解决难题的能力(还是我太菜了吧)

题解

E

可以考虑到一些性质,假设该字符串为k级回文串,那么将这个字符串拆成2个字符串,若这两个字符串仍回文,那它们就是k-1级回文串,直到拆分成1级回文串后,再拆分出的字符串就不能再回文,否则就会改变最终结果
例如第五组样例中
2
acaabcbababaaac
用黑线分隔开的两部分,应为回文串,并且这整个字符串也应为回文串
即要求acaabcb回文,babaaac回文,acaabcbababaaac回文
但用黄线分割开的部分不能回文
即要求aca不回文,bcb不回文,bab不回文,aac不回文
故可以发现第一个字符,第七个字符,第九个字符,第十五个字符必须相同,以此类推

符合上述条件的即为要求的二级回文串
可以提前进行一个处理,用二分的思想,将每个数找到它要与哪个数相等,用并查集将这个数视为它的祖先

这样的话,只需要找出每一组中出现次数最多的字符即可,然后可以算出一个初值,即将所有组用最优方式修改
但会出现特殊情况,即修改完以后,黄线分割开的部分有回文串,所以我们不光需要找到每一组出现最多的字符,还要找出出现次多的字符,当出现上述情况时,只需要修改一个字符就可以使最终的字符串符合题意,所以我们只需要求出修改哪个字符,使最后结果最优即可

code
#include<bits/stdc++.h>
const int N=500005; 
using namespace std;
int k,n,p,v[N],fa[N],c[N][27],mx[N],q[N],id[N],ans;
char s[N];
void err()
{
   
	puts("impossible");
	exit(0);
}
int find(int k)
{
   
	if(k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中的代码是一个使用Kosaraju算法来求解强连通分量的示例代码。该算法通过两次深度优先搜索来找到图中的所有强连通分量。在代码中,首先进行第一次深度优先搜索,将访问过的节点按照访问的顺序加入到栈S中。然后进行第二次深度优先搜索,从栈S中依次取出节点,并将其所在的强连通分量中的所有节点标记为同一个sccno值。最后,通过统计不同的sccno值的个数,即可得到图中的强连通分量的个数。 引用\[2\]中的内容是关于回文串的性质。假设一个字符串为k级回文串,那么将这个字符串拆成两个字符串,若这两个字符串仍然是回文串,那它们就是k-1级回文串,直到拆分成1级回文串后,再拆分出的字符串就不能再是回文串,否则就会改变最终结果。例如,对于字符串"acaabcbababaaac",可以将其拆分为"acaabcb"和"babaaac"两个回文串,然后再将这两个回文串继续拆分,直到拆分成单个字符,即"aca"、"bcb"、"bab"、"aac",这些都是回文串。但是,如果按照其他方式拆分,如"aca"、"abc"、"bab"、"aa"、"c",则无法得到回文串。因此,可以观察到,对于一个k级回文串,第一个字符、第k/2个字符、第k/2+1个字符、第k个字符等位置上的字符必须相同。 根据以上引用内容,"Komura-Equivalence"是一个未提供具体定义的术语,无法直接回答该问题。请提供更多相关信息或明确问题的要求,以便我能够给出更准确的答案。 #### 引用[.reference_title] - *1* [Kosaraju](https://blog.csdn.net/qq_45673190/article/details/104599315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Japanese Student Championship 2021](https://blog.csdn.net/weixin_55355427/article/details/115915978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值