题目背景

2017国庆清北D1T1

题目描述

你是能看到第一题的 friends 呢。

——hja

何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx。何大爷今天为

字符串定义了新的权值计算方法。一个字符串由小写字母组成,字符串的权值

被定义为其中出现次数最多的字符的次数减去出现次数最少的字符的次数。 (注

意,在讨论出现最少的字符的时候,该字符必须至少出现一次)现在何大爷给

你一个字符串,何大爷想知道这个字符串的所有子串中权值最大的权值是多

少?

输入输出格式

输入格式:

第一行一个整数n,代表字符串的长度。

接下来一行n个小写字母,代表该字符串。

输出格式:

一行一个整数代表答案。

输入输出样例

输入样例#1:

10
aabbaaabab
输出样例#1:

3

说明

对于30%的数据,1<=n<=100

对于60%的数据,1 ≤ n ≤ 1000。

对于100%的数据,1 ≤n ≤ 10^6 .

不过,luogu神机。。

1000ms时限TLE仨点

3000ms时限AC

我不就改了改时限嘛,最高的点跑了不到500ms,然后就TLE了?

 /*
sum[r][a]-sum[r][b]-sum[l-1][a]-sum[l-1][b]
用minv[a][b]代替sum[l-1][a]-sum[l-1][b] sum[a][b]表示1~a中字母b出现的次数
minv[a][b]表示a与b个数的差的最小值
p[a][b]表示minv[a][b]出现的位置
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std; int n,ans,minv[][],p[][],sum[],last[];
char s[]; int main()
{
scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++)
{
int c=s[i]-'a';
last[c]=i;
sum[c]++;
for(int j=;j<;j++)
{
if(c!=j&&sum[j]) //自己不能与自己比较,而且j必须出现过
{
ans=max(ans,sum[c]-sum[j]-minv[c][j]-(last[j]==p[c][j])); //last[j]==p[c][j]:如果j最后一次出现是在minv[c][j]最小的时候,那么要将这个j算上,因为如果不算这个j那么j就没出现过了
ans=max(ans,sum[j]-sum[c]-minv[j][c]-(last[j]==p[j][c])); //同理
}
}
for(int j=;j<;j++)
{
if(sum[c]-sum[j]<minv[c][j]) minv[c][j]=sum[c]-sum[j],p[c][j]=i; //更新差的最小值和出现位置
if(sum[j]-sum[c]<minv[j][c]) minv[j][c]=sum[j]-sum[c],p[j][c]=i;
}
}
printf("%d",ans);
return ;
}

2017.10.1 国庆清北 D1T1 zhx的字符串题的更多相关文章

  1. 2017.10.4 国庆清北 D4T2 正方形

    题目描述 在一个10000*10000的二维平面上,有n颗糖果. LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果! 事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖 ...

  2. 2017.10.6 国庆清北 D6T2 同余方程组

    题目描述 求关于x 的同余方程组 x%a1 = b1 x%a2 = b2 x%a3 = b3 x%a4 = b4 的大于等于0 的最小整数解. 输入输出格式 输入格式: 一行8 个整数,表示a1; b ...

  3. 2017.10.6 国庆清北 D6T1 排序

    题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. 比如a 序列 ...

  4. 2017.10.3 国庆清北 D3T3 解迷游戏

    题目描述 LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画. 幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它. 老板有一个n*m的矩阵,他想 ...

  5. 2017.10.3 国庆清北 D3T2 公交车

    题目描述 LYK在玩一个游戏. 有k群小怪兽想乘坐公交车.第i群小怪兽想从xi出发乘坐公交车到yi.但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点. LYK想让小怪兽们尽可能的到达自己想 ...

  6. 2017.10.3 国庆清北 D3T1 括号序列

    题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的括号序列. 若A是合法的括号序列,则(A)是合法的括号序列. 若A和B分别是合法的括号序列,则AB是合法的 ...

  7. 2017.10.4 国庆清北 D4T1 财富

    (其实这题是luogu P1901 发射站 原题,而且数据范围还比luogu小) 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高为美的环境,因此在 ...

  8. 2017.10.7 国庆清北 D7T1 计数

    题目描述 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. 输入输出格式 输入格式: 输入文件名为count.in. 第一行,包含两个整数:n ...

  9. 2017.10.5 国庆清北 D5T1 拼不出的数

    题目描述 3 个元素的集合{5,1,2}的所有子集的和分别是0,1,2,3,5,6,7,8.发现最小的不能由该集合子集拼出的数字是4. 现在给你一个n个元素的集合,问你最小的不能由该集合子集拼出的数字 ...

随机推荐

  1. Drools7 Hello Wrold 入门详细步骤--系列01课

    一.什么叫规则引擎?规则--->写在文档上引擎--->在java代码上,引用这个文档上的规则 二.drools规则引擎有什么用?简单来说就是将多变的规则,从业务代码中剥离出来(当规则变了之 ...

  2. Actions require unique method/path combination for Swagger

    原文:Actions require unique method/path combination for Swagger services.AddSwaggerGen (c => { c.Re ...

  3. 学习docker 部署nginx记录

    docker pull nginx $ docker pull nginx $ docker run --name nginx-test -p 8081:80 -d nginx docker conf ...

  4. php 数组去空

    1.preg_grep("/\S+/i", $data); 2.array_filter($data); 3.for($data $k = > $v) { if(!$v) u ...

  5. DoNetCore Web Api 采用Swagger进行接口文档管理

    第一步:创建API项目 步骤这里不说明 第二步:就是Nuget 包, 两种方式:1.工具->Nuget管理->程序包管理控制台 Install-Package Swashbuckle.As ...

  6. JWT生成token及过期处理方案

    业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...

  7. form组件 初始化

    class MyForm(Form): user = fields.ChoiceField( # choices=((1, '上海'), (2, '北京'),), initial=2, widget= ...

  8. 云计算与大数据实验:Hbase shell基本命令操作

    [实验目的] 1)了解hbase服务 2)学会启动和停止服务 3)学会进入hbase shell环境 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件 ...

  9. 树莓派配置wifi网络+更换镜像源

    刚安装完系统后,采用的是树莓派通过网线连接笔记本wifi共享方式联网,后面考虑不使用网线,让树莓派使用wifi联网. 一.配置无线网络 1.通过ssh登录树莓派,输入用户名和密码后,输入如下命令进入图 ...

  10. 【笔记】Reptile-一阶元学习算法

    目录 论文信息 Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018. 一.摘要 本文 ...