首页 > 其他分享 >归档 221018 | 做题记录

归档 221018 | 做题记录

时间:2022-10-18 21:46:48浏览次数:76  
标签:记录 int res 归档 ++ 往右 次数 221018 ans

K. Difference

https://loj.ac/p/2161

好耶我会打 \(n^3\)!这说明这道题 \(n\) 一定等于 \(10^3\)!

我超,是 \(10^6\)????寄,,,,,


枚举出现次数最多的字符(假设为 \(x\))和出现次数最少的字符(假设为 \(y\))。

然后用一个类似于双指针的东西,额,我解释不大来,总之意思就是我们要让 \(y\) 和 \(x\) 第一次出现的地方分别成为起始区间的起点和终点。

说是起点和终点,但实际上你不用特别在意它们一开始的前后顺序,因为我们会把 \(26\times 26\) 中情况全部枚举一遍。。。而且不排除存在 \(x\) 反杀的可能性。

然后,如果右端点能往右挪,多塞下一个 \(x\),我就肯定往右挪,此时统计的答案增加 \(1\)。如果 \(x\) 挪不了了,那就往右挪 \(y\),不停下来是因为虽然 \(x\) 现在一时吃瘪,但后面还是有可能反杀 \(y\)。

那么问题来了,你怎么知道你枚举的这个区间里 \(x\) 一定出现次数最多,\(y\) 一定出现次数最少???

我可没这么说过嗷,你想,如果 \(x\) 出现次数不是最多,\(y\) 出现次数不是最少,说明答案也不是这个区间里最多的,所以后面还会被更新。

关于「往右挪」这个操作,我们预处理一下某个字符某一次出现的位置就好。

然后注意跳的时候如果出现了数量统计为负的情况就可以从 0 开始统计了!

然后最后的时间复杂度是 \(\mathcal O(n)\),因为要非常严谨地 KA 掉常数,虽然这个常数是一个明显跑不满的 \(10^2\) 级别。。。

namespace XSC062 {
using namespace fastIO;
const int maxm = 28;
const int maxn = 1e6 + 5;
char s[maxn];
int cnt[maxm];
int d[maxm][maxn];
int n, l, r, res, ans, t, f;
inline int max(int x, int y) {
	return x > y ? x : y; 
}
int main() {
	read(n);
	reads(s + 1);
	for (int i = 1; i <= n; ++i)
		d[s[i] - 'a' + 1][++cnt[s[i] - 'a' + 1]] = i;
	for (int x = 1; x <= 26; ++x) {
		if (!cnt[x])
			continue;
		for (int y = 1; y <= 26; ++y) {
			if (!cnt[y] || x == y)
				continue;
			f = 0;
			t = cnt[x] + cnt[y];
			l = 1, r = 1, res = -1;
			while (t--) {
				if ((l <= cnt[x] && d[x][l] < d[y][r])
					|| r > cnt[y])
					++l, ++res;
				else ++r, res -= f, f = 1;
				if (res < 0)
					f = 0;
				ans = max(ans, res);
			}
		}
	}
	print(ans);
	return 0;
}
} // namespace XSC062

标签:记录,int,res,归档,++,往右,次数,221018,ans
From: https://www.cnblogs.com/XSC062/p/16804300.html

相关文章

  • 记录清理Oracle归档日志
    一、登录数据库1.切换到Oracle用户su命令–切换用户身份su命令来自于英文单词“switchuser”的缩写,其功能是用于切换用户身份。管理员切换至任意用户身份而无需密......
  • 20221018笔记
    初级课程只有10节,所以计划10天看完,一鼓作气嘛,20221016开始,20221025全部看完;之后再进入进阶课程。函数的递归是重中之重!一定要练习,不然等于白学!函数需要学会查询工具的使用:M......
  • 记录一次JSP后门的分析
    0x01环境部署首先启动一个tomcat的环境先把这里的代码跑起来先把这里的代码跑起来,访问tomcat在docker中的​​tomcat/conf​​中可以看到账号密码将JSP打包为war包​​jar......
  • BUG记录 ---- 小程序开发
    1.bug记录微信开发者工具公众号网页调试的调试器没了?改变打开开发者工具的方式,改为windows从任务栏打开工具!!!!而不是从快捷方式或者底部固定栏打开开发者工具里面的......
  • 【错误记录】jcenter 移除问题 ( Please remove usages of `jcenter()` Maven reposit
    报错信息:Pleaseremoveusagesof`jcenter()`MavenrepositoryfromyourbuildscriptsandmigrateyourbuildtootherMavenrepositories.Thisrepositoryisde......
  • 记录一次寄了的Momenta面试
    记录一次寄了的Momenta面试记录了一些关键词时间:2022/10/1215:00形式:飞书视频会议js模板字符串js的扩展运算符http1.02.0React属性为什么设计成不变的,答案......
  • 记录上传文件到mysql数据库中遇到的问题
    在开发一个Qt的界面程序,想把程序批量生成的数据文件上传进数据库中。最开始尝试将文件读到QByteArray类型的变量中,插入数据表的mediumblob类型里,但是插不了,数据表结果一直......
  • 关于好心得好报的记录
    2022年初,从某鱼购买了一个二手华为防火墙用于学习技术,当时很多教程与界面不符,研究发现是设备系统版本老旧,华为升级需要合作商账号,华为2021年末终止了非在保设备的技术支持......
  • Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource
    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移。因为项目整体要迁移到ASP.NETCore2.0版本,而Lucene使用的版本是3.6.......
  • SQL server把多条记录查找结果合并成一条记录
    例如我们有如下一张"用户工厂"表,为多对多关系:selectUserId,工厂号from用户工厂 如果我们希望得到三个工厂号对应了哪些UserId,把这些UserId放到一行里面显示出来,......