洛谷 3519 && bzoj 2213 Difference
联考考试考到了这个题,随机化40分,现在来秒掉它吧。
题意:
给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。
输入输出样例
我们定义$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+,M=;
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+);
for(int i=; i<=n; i++)
{
int c=s[i]-'a';
num[c]++;
last[c]=i;
for(int j=; j<; 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=; j<; 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 ;
}
洛谷 3519 && bzoj 2213 Difference的更多相关文章
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT
题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...
- 洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询
题目链接 洛谷 bzoj 题解 整体二分 Code #include<bits/stdc++.h> #define LL long long #define RG register usi ...
- 洛谷 P2486 BZOJ 2243 [SDOI2011]染色
题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221” ...
- 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓
题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...
- 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑
题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...
- 洛谷 P2046 BZOJ 2007 海拔(NOI2010)
题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- 洛谷 P2709 BZOJ 3781 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...
随机推荐
- angular源码剖析之Provider系列--CacheFactoryProvider
CacheFactoryProvider 简介 源码里是这么描述的: Factory that constructs {@link $cacheFactory.Cache Cache} objects ...
- MFC类别概述
MFC 类别主要可分为下列数大群组: ■ General Purpose classes - 提供字符串类别.数据处理类别(如数组与串行),异 常情况处理类别.文件类别...等等. ■ Windows ...
- 关于国债的一些计算: 理论TF价格2(缴款日前有付息)
计算 ExpectedTFPrice 是一个比较复杂的计算,我们这里讨论复杂的一种情况. 给定一只可交割国债bond(一般为CTD),一个国债期货tf, 在t日(表示tf的一个交易日期,我们通过bon ...
- bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】
还是没有理解透原根--题目提示其实挺明显的,M是质数,然后1<=x<=M-1 这种计数就容易想到生成函数,但是生成函数是加法,而这里是乘法,所以要想办法变成加法 首先因为0和任何数乘都是0 ...
- PyQt5编程入门
1 25行的弹出式闹钟 import sys import time from PyQt5 import QtCore from PyQt5.QtWidgets import QLabel from ...
- 1051:A × B problem 大数相乘
给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数.接着有T组数据,每组数据只有一行,包括两个非负整数A和B.但A和B非常大,Redraimen ...
- mysql中迅速插入百万条测试数据的方法
对比一下,首先是用 mysql 的存储过程弄的: 复制代码代码如下: mysql>delimiter $ mysql>SET AUTOCOMMIT = 0$$ mysql> crea ...
- SOLR-disMax查询参数
dismax参数用于处理用户输入的简单短语,并根据字段的重要度进行加权查询,查询范围为多个字段区域.dismax会忽略搜索字符串中的 "AND","OR", & ...
- hdu4003/蓝桥杯 金属采集
思路: 树形dp + 分组背包dp. 参考https://www.cnblogs.com/kuangbin/archive/2012/08/29/2661928.html 实现: #include & ...
- 日常博客----rem,em的恩怨相杀
基本知识: 使用 em 和 rem 单位可以让我们的设计更加灵活,能够控制元素整体放大缩小,而不是固定大小. 我们可以使用这种灵活性,使我们在开发期间,能更加快速灵活的调整,允许浏览器用户调整浏览器大 ...