当前位置: 首页 > 编程日记 > 正文

洛谷 3519 bzoj 2213 Difference

联考考试考到了这个题,随机化40分,现在来秒掉它吧。

题意:

给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。

输入输出样例

输入样例#1: 复制
10
aabbaaabab
输出样例#1: 复制
3

我们定义$cnt[i][j]$表示区间$[1,i]$中,j出现的次数,

定义字符a,b(非字符a,b),a为出现最多的字符,b为出现最少的字符。

我们利用前缀和统计每一个字符出现的次数。

那么对于一个区间$[i,j]$,字符a出现的次数为$cnt[j][a]-cnt[i][a]$,字符b出现的次数为$cnt[j][b]-cnt[i][b]$,我们枚举每一个字符的配对情况。

对于26个字符$$ans=max \{ ans,(cnt[j][a]-cnt[i][a])-(cnt[j][b]-cnt[i][b]) \}$$。

这样枚举时间复杂度$O(n^2 \times 26 \times 26)$,还可以啦。

现在我们来优化一下上边的过程。

$$(cnt[j][a]-cnt[i][a])-cnt[j][b]-(cnt[i][b])$$

可以变为

$$(cnt[j][a]-cnt[j][b])-(cnt[i][a]-cnt[i][b])$$

对于算式的前半边O(n \times 26)枚举,我们来优化一下后半边。

对于后边的式子,求得为j以前$cnt[i][a]-cnt[i][b]$的最小值,然而j是怎么过来的,到了j必然前边的数都有经过,所以我们在枚举是维护一个$cnt[i][a]-cnt[i][b]$的最小值即可(代码中用到minv数组)。

代码中有p[i][j]数组表示更新字符i和字符j差的最小值的位置。

总的时间复杂度$O(n \times 26)$

#include<complex>
#include<cstdio>
using namespace std;
const int N=1e6+7,M=27;
int n,ans;
int last[M],num[M],p[M][M],minv[M][M];
/* last表示字符最后出现的位置,num表示字符出现的次数。
p数组表示更新维护最小值的位置,minv表示维护的最小值。*/
char s[N];
int main()
{
//    freopen("B.in","r",stdin);
//    freopen("B.out","w",stdout);scanf("%d%s",&n,s+1);for(int i=1; i<=n; i++){int c=s[i]-'a';num[c]++;last[c]=i;for(int j=0; j<26; j++)if(j!=c && num[j])ans=max(ans,max(num[c]-num[j]-minv[c][j]-(last[j]==p[c][j]),num[j]-num[c]-minv[j][c]-(last[c]==p[j][c])));/*最后出现的位置与最小值更新的位置相等,那么在我们判断的区间里,不会出现j,对于这段区间-j,就等于只是选定区间内c出现的次数,这是不符合条件的,那么要让他更大,再向左选一个不同的字符那么tot[u]-1一定是最优的。*/for(int j=0; j<26; j++)if(num[j]-num[c]<minv[j][c]){minv[j][c]=num[j]-num[c];p[j][c]=i;}//更新最小值。
    }printf("%d\n",ans);
//    fclose(stdin);fclose(stdout);return 0;
}

转载于:https://www.cnblogs.com/rmy020718/p/9615482.html

相关文章:

linux 文件管理 教程,Linux文件管理

Linux文件管理本文介绍如何在Linux上创建文件、删除文件、复制文件、移动文件使用touch命令在linux上创建文件使用rm命令在linux上删除文件使用cp命令在linux上复制拷贝文件mv命令在linux上移动或重命名文件##文件简介Linux中文件可以分为普通文件、目录文件、链接文件、设备文…

ios cocopods 安装使用及高级教程

CocoaPods简介 每种语言发展到一个阶段&#xff0c;就会出现相应的依赖管理工具&#xff0c;例如Java语言的Maven&#xff0c;nodejs的npm。随着iOS开发者的增多&#xff0c;业界也出现了为iOS程序提供依赖管理的工具&#xff0c;它的名字叫做&#xff1a;CocoaPods。http://co…

单片微型计算机概念及组成,中国民用航空飞行学院2014年微机原理与接口考研复习大纲...

中国民用航空飞行学院硕士研究生入学考试801《微机原理与接口》复习大纲第一部分 考试说明一、 考试性质《微机原理与接口》是中国民用航空飞行学院硕士生入学考试科目之一。它的评价标准是高等学校、科研院所的优秀本科毕业生能达到及格以上水平&#xff0c;以保证被录取者具…

【转】Jmeter常见问题

收集工作中JMeter遇到的各种问题1. JMeter的工作原理是什么&#xff1f;向服务器提交请求&#xff1b;从服务器取回请求返回的结果。2. JMeter的作用&#xff1f;JMeter可以用于测试静态或者动态资源的性能&#xff08;文件、Servlets、Perl脚本、java对象、数据库和查询、ft…

linux的tar中ztvf,linux中的tar命令(2)

实例4&#xff1a;只将 /tar 内的 部分文件解压出来命令&#xff1a;tar -zxvf /opt/soft/test/log30.tar.gz log2013.log输出&#xff1a;[rootlocalhost test]# tar -zcvf log30.tar.gz log2012.log log2013.loglog2012.loglog2013.log[rootlocalhost test]# ls -al log30.ta…

xcode 消除警告

项目中引用大量的第三方代码时&#xff0c;这些代码很复杂&#xff0c;不要轻易去改动它&#xff0c;如果编译产生很多警告&#xff0c;该如何消除呢&#xff1f; 1. 最直接、最一劳永逸、最安全的方式&#xff0c;直接找到警告的那段代码&#xff0c;改为不警告。这个方式最安…

RoadMap

转载于:https://www.cnblogs.com/taogao3364/p/9616020.html

罗格斯大学电气与计算机工程专业怎么样,美国电子工程排名 - 电子计算机工程的研究生教育,特别是偏向电路设计方向,请问是美国罗格斯大学新布朗斯维克校区好还是清华...

美国电子工程排名 - 电子计算机工程的研究生教育&#xff0c;特别是偏向电路设计方向&#xff0c;请问是美国罗格斯大学新布朗斯维克校区好还是清华&#xff0c;1. 电子计算机工程的研究生教育&#xff0c;特别是偏向电路设计方向&#xff0c;请问是美国罗格斯大学新布朗斯维克…

Win10系列:VC++调用自定义组件1

通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件&#xff0c;接下来将在上一小节所新建的项目基础上&#xff0c;继续介绍如何在不同的语言所编写的应用中调用这个WinRT组件。 &#xff08;1&#xff09;JavaScript调用WinRT组件 在解决…

windows常用命令有哪些(整理)

windows常用命令有哪些&#xff08;整理&#xff09; 一、总结 一句话总结&#xff1a;其实这个好学&#xff0c;只要先弄懂主干&#xff0c;清除主干&#xff0c;那么枝叶的添加逻辑就很清除了 这种多内容的&#xff0c;散乱的&#xff0c;弄清除主干效率就高了 1、windows命令…

c语言定义字符类型变量的关键字,C语言数据类型

C语言关键字&#xff1a;也称保留字&#xff0c;是C语言预先定义的、具有特殊意义的单词。数据类型关键字(12个)&#xff1a;(1)char&#xff1a;声明字符型变量或函数(2)double&#xff1a;声明双精度变量或函数(3)enum&#xff1a;声明枚举类型(4)float&#xff1a;声明浮点型…

mac tomcat https

一、HTTPS的基本工作原理&#xff1a; HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手&#xff0c;在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议&#xff0c;更是一件经过艺术家精心设计的艺术品&#xff0c;…

计算机应用基础电子演示文稿系统行考作业,最新电大计算机应用基础形考PowerPoint答案...

.;.. 计算机应用基础/ ? 课程考核/ ? 模块4 PowerPoint 2010 电子演示文稿系统——客观题一&#xff0e;单项选择题1. 在PoewrPoint 中&#xff0c;“视图”这个名词表示( D )。A. 一张正在修改的幻灯片B. 一种图形C. 编辑演示文稿的方式D. 显示幻灯片的方式2. 在下列PowerPo…

数据结构(三) 用java实现七种排序算法。

很多时候&#xff0c;听别人在讨论快速排序&#xff0c;选择排序&#xff0c;冒泡排序等&#xff0c;都觉得很牛逼&#xff0c;心想&#xff0c;卧槽&#xff0c;排序也分那么多种&#xff0c;就觉得别人很牛逼呀&#xff0c;其实不然&#xff0c;当我们自己去了解学习后发现&a…

Codeforces ECR50 div2题解

A&#xff1a;签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long ll read() {ll x0,f1;char cgetchar();while (c<0||…

开发ios的语言

iOS发展这么多年了&#xff0c;很多第三方语言都向开发一种自己的iOS&#xff0c;于是多种跨平台诞生了&#xff01; Object-c、swift&#xff1a; 当然是开发iOS的首先&#xff0c;毕竟是苹果自己的东西&#xff0c;也是最流行、最适合开发ios的&#xff0c;无论是UI库、性能、…

c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

原标题&#xff1a;单片机C语言编程定时器的几种表达方式吴鉴鹰单片机开发板地址店铺&#xff1a;【吴鉴鹰的小铺】地址&#xff1a;【https://item.taobao.com/item.htm?_uukgdp5a7629&id524088004171】单片机C语言编程中&#xff0c;定时器的初值对于初学者真的是比较不…

上交2017计算机专业就业,上海交通大学计算机科学与工程系(CSE)

经过多轮的意向调整&#xff0c;最终确定的生产实习去向结果公示(请见附件)。原则上&#xff0c;经公示后结果不做调整。生产实习执行时间从7月24日到8月27日&#xff0c;请目前尚未就课题开展明细跟导师联系的同学在7月24日之前务必联系导师。一、实习报告要求1、从教务网站&a…

树上倍增求lca

嗯~ o(*&#xffe3;▽&#xffe3;*)o lca是树上两点的最近公共祖先。如果在同一个分支上就是更靠近根的那个点&#xff0c;否则就是大家一起向上走&#xff0c;第一次能都经过的那个点。 根据这两个性质&#xff0c;我们对于每次询问可以把一个向上走到根节点&#xff0c;标记…

ios app内嵌入http服务器

1.采用CocoaHTTPServer https://github.com/robbiehanson/CocoaHTTPServer 2.采用MongooseDaemon https://github.com/face/MongooseDaemon

编程模拟洗牌和发牌过程c语言,洗牌发牌模拟系统课程设计报告.doc

集美大学诚毅学院《高级语言程序设计》课程设计实验报告题目&#xff1a;洗牌和发牌模拟专业&#xff1a;计算机科学与技术班级&#xff1a;姓名&#xff1a;成绩&#xff1a;指导教师&#xff1a;完成日期&#xff1a;2008 年 6月 26 日一、目的C语言进行程设计的能力&#xf…

使用complete的图片属性检测图片是否加载完毕

转载于:https://www.cnblogs.com/zclx/p/6652545.html

学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...

你好&#xff1a;你的这种情况应该是系统调整或服务器维护造成的&#xff0c;在这两天还有很多网友无法进入主页&#xff0c;请耐心等待&#xff0c;新浪工作日人员会尽快将系统恢复&#xff01; 祝顺利&#xff01;多出好文章&#xff01; 博客临时故障&#xff0c;用新浪各种…

NOIP2018TG 初赛复习

Date&#xff1a; 20180911 TCP/IP OSI7面向对象的程序设计语言 1.不是自顶向下2.simula 67语言 第一个3.继承性、封装性、多态性NOIP支持的语言环境&#xff1a;对于c / c &#xff1a;Dev-Cpp \ RHIDE (DJGPP) &#xff08;推荐&#xff1a;Dev-Cpp&#xff09;对于pascal&am…

分裂游戏(bzoj 1188)

Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏。 该游戏的规则试&#xff1a; 共有 n 个瓶子&#xff0c; 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆&#xff0c;两个人轮流取豆子&#xff0c;每一轮每人选择 3 个瓶子。标号为 i,j,k, 并要保证 i < j…

rb c语言,C语言,RB和RBT什么区别啊???这里的typedef 什么作用???

满意答案guiyalm47042017.01.10采纳率&#xff1a;58% 等级&#xff1a;12已帮助&#xff1a;5026人1) #define是预处理指令&#xff0c;在编译预处理时进行简单的替换&#xff0c;不作正确性检查&#xff0c;不关含义是否正确照样带入&#xff0c;只有在编译已被展开的源程…

ios 项目的.gitignore

git作为代码管理工具&#xff0c;.gitignore文件用来忽略哪些哪些文件不用添加到仓库管理https://www.gitignore.io/ 这个网址输入变成语言会帮你生成常用的忽略文件如&#xff1a;IOS项目&#xff0c;输入Xcode、Object-C、Swift、C、C、git、svn生成&#xff1a;# Created by…

计算机一级ps2019,2019年计算机一级考试PS基础学习点子:PS菜单中英文对照表.docx...

2019 年计算机一级考试 PS 基础学习点子&#xff1a; PS 菜单中英文对照表PS菜单中英文对照表一、FileNew2.Open3.Open As4.Open RecentClose6.Save7.Save As8.Save for Web9.Revert10.Place11.ImportPDF ImageAnnotationsExportManage WorkflowCheck InUndo Check OutUpload T…

ffmpeg 常用命令

mp4中的h264编码&#xff0c;而h264有两种封装&#xff1a; 一种是annexb模式&#xff0c;传统模式&#xff0c;有startcode&#xff0c;SPS和PPS是在ES中&#xff1b;另一种是mp4模式&#xff0c;一般mp4、mkv、avi会没有startcode&#xff0c;SPS和PPS以及其它信息被封装在co…

re.sub用法

re.sub功能是对于一个输入的字符串&#xff0c;利用正则表达式&#xff0c;来实现字符串替换处理的功能返回处理后的字符串 re.sub共有五个参数 三个必选参数pattern,repl,string 两个可选参数count,flags pattern,表示正则中的模式字符串 反斜杠加数字&#xff08;\n&#xff…