考试情况

前四题用了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==fa[k]) return k;else return fa[k]=find(fa[k]);
}
void solve(int l,int r,int k)
{if(!k) return;int mid=l+r>>1;if((l+r)&1) solve(l,mid,k-1),solve(mid+1,r,k-1); else solve(l,mid-1,k-1),solve(mid+1,r,k-1);for(int i=l;i<l+r-i;i++) fa[r+l-i]=i;
}
int main(){scanf("%d%s",&k,s+1);p=n=strlen(s+1);for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=k;i++){if(!p) err();p>>=1;}if(p==1) err();solve(1,n,k);for(int i=1;i<=n;i++) mx[i]=q[i]=-N,c[find(i)][s[i]-'a']++;for(int j=1;j<=n;j++)if(find(j)==j)for(int i=0;i<27;i++){if(c[j][i]>mx[j]) q[j]=mx[j],id[j]=i,mx[j]=c[j][i];else if(c[j][i]>q[j]) q[j]=c[j][i];}for(int i=1;i<=n;i++) if(find(i)==i) ans+=mx[i];if(!p){printf("%d",n-ans);return 0;}int fl=0,mn=N;for(int i=1;i<=p;i++) if(id[i]!=id[p-i+1]) fl=1;if(!fl){for(int i=1;i<=p;i++) if(i+i-1!=p) mn=min(mn,mx[i]-q[i]);ans-=mn;}printf("%d",n-ans);return 0;
}

Japanese Student Championship 2021相关推荐

  1. Japanese Student Championship 2021 D - Nowhere P(递推 + 快速幂)

    传送门 这题很明显存在一个递推关系,思考了一下果然如此. 设dp[i][j]为前i项的和膜p为j的方案数,显然dp[i+1][j] = sum(dp[i][k]), (k + j != p), 那么问 ...

  2. 【AtCoder】Japanese Student Championship 2019 Qualification题解

    Japanese Student Championship 2019 Qualification题解 A. Takahashi Calendar ◇题目传送门◆ 题目大意 定义Product Day为 ...

  3. Microsoft office 家庭学生版(Home Student)下载地址

    记录Microsoft office 家庭学生版下载地址 Hi!这是一篇资源下载记录呀! 之前一直觉着office专业版应该最好吧,然后每次安装都整了个全家桶--直到我发现,家庭学生版只安装Word. ...

  4. Android之Xposed框架完全使用指南

    文章目录 Xposed环境搭建 Xposed简介 Xposed原理 Xposed的安装 Xposed插件开发 Xposed插件编写流程 Xposed开发之Hook构造函数 相关API 无参构造函数的h ...

  5. 02-继承的本质-Objective-C基础

    1 创建1个对象 这个对象在内存中是如何分配的 1) 子类对象中有自己的属性和所有的父类的属性 2) 代码段中的每1个类都有1个叫做isa的指针,这个指针指向它的父类.一直指到NSObject [p1 ...

  6. 牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!

    反射概述 什么是反射 将类的各个组成部分封装为其他对象的过程就叫做 反射,其中 组成部分 指的是我们类的 成员变量(Field).构造方法(Constructor).成员方法(Method). 使用反 ...

  7. Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解...

    2019独角兽企业重金招聘Python工程师标准>>> 查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的 ...

  8. 全民一起玩Python提高篇第十二课:面向对象基本原理与语法(三)

    继承 class A:def __init__(self):self.money=50000000self.house=100def my_small_goal(self):print('先挣他一个亿 ...

  9. Visa for a coder

    思来想去,还是记录下吧,毕竟算作一个经历.为了各位程序员们能够顺利出境,多写python 和 MATLAB 程序! July, 2020.  拿到美国一高校 的CSC联合培养一年的证书,但由于疫情和政 ...

  10. SQL Server 数据库

    SQL Server 数据库 一.了解数据库 二.创建库表 1.创建数据库 A:可视化创建库 B:Sql 语句创建库 C:切换数据库 D:删除数据库 E:开启数据库服务 2.创建数据表 A:可视化创建 ...

最新文章

  1. hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
  2. 使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令
  3. SQL Server 找回没有备份的数据
  4. 云服务器怎么选系统,云服务器怎么选择操作系统
  5. 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
  6. synchronized方法与synchronized代码块的区别
  7. JavaScript学习(七)—元素节点的获取方式
  8. Windows Phone 7 Coding4Fun的弹出框
  9. java 综合练习_Java 之综合练习
  10. 网易编程题------操作序列
  11. MySQL优化--索引
  12. 查询Mysql的数据架构信息研究
  13. Python3.6下安装爬虫scrapy框架的安装步骤以及遇到的诸多问题
  14. deepin驱动精灵_深度Linux Deepin系统安装教程使用体验
  15. 专项UI自动化测试 - appium(元素定位方式和思考)|看了就会
  16. 基于天地图热力图及区域划分
  17. 如何在阿里云中注册域名
  18. 自媒体技巧:企鹅号与公众号同步教程
  19. Oracle索引、视图、序列、同义词、事务、锁机制详解
  20. debugger小解

热门文章

  1. 认识卷积神经网络(卷积层和池化层)
  2. Google离开我们快十年了
  3. 融资融券的交易成本有哪些?
  4. 台式计算机diy,DIY组装台式电脑经验分享学习篇
  5. 矩阵减法c语言程序,矩阵的加减法
  6. html全局背景代码,html背景代码
  7. 在MyEclipse中,如何使用Git将项目上传到G码云仓库
  8. 论文阅读 (九):A survey on instance selection for active learning (2012)
  9. Go的goroutine
  10. linux命令系列 grep