[USACO19JAN,Platinum] Redistricting

[USACO19JAN,Platinum] Redistricting

这道题A了才知道。。并不难a! orz
在这里插入图片描述

题目

内存限制:128 MiB
时间限制:1000 ms
题目描述
奶牛们的最大城市Bovinopolis正在重新划分势力范围—生活在那里的主要是两个品种的奶牛(Holsteins和Guernseys),他们之间始终都有争执,因为两种奶牛都希望自己能在Bovinopolis的政府中保持足够的影响力。

Bovinopolis的大都市区域由N(1≤N≤3*1e5)个牧场组成,每个牧场包含一头奶牛,她可以是Holsteins,也可以是Guernseys。

Bovinopolis政府希望将大都市区划分为若干个相邻的区域,每个区域最多包含K个牧场(1≤K≤N),每个牧场都恰好只包含在一个区域内。由于目前Bovinopolis政府由Holsteins牛控制,因此,他们希望找到一种重新划分的方法,使得Guernseys牛占多数或两种牛相当的区域尽可能的少(如果Guernseys的数量和Holsteins的数量相同,则认为是两种牛相当)。

有一个关心政治的Guernseys牛的联盟想知道政府的计划会对她们造成多少的伤害,希望你帮助她们计算出Guernseys牛占优或实力相当的区域最小可能的数量。

输入格式
第一行输入2个数字N和K,表示牧场的数量和每个区域最多的牧场数。

第二行输入N个只包含H和G的字符串,表示第i个牧场由Holsteins牛或Guernseys牛控制的牧场。

输出格式
输出Guernseys牛占优或均势的最小分区数量。

样例
样例输入
7 2
HGHGGHG
样例输出
3

题解

首先一个长度为k的区间,可以划分为1和k-1,2和k-2…k,很多种选择,
而在这中间每一种选择都会影响答案,
而且与前面一次选择后k具体在哪个到哪个区间有关系

那么这道题就很容易想到DP了,而且长得跟台阶问题很像!

首先我们可以定义一个pre数组,表示1~i区间中,H比G多的个数
如果小于等于0的话,就意味着G占优势,答案+1,大于0则H占优势,答案不变

我们先来处理最容易的DP,dp[i]表示处理完i后的最小答案,很容易就写出:
dp[i] = min ( dp[i], dp[i-j] + ( pre[i] - pre[i - j] ) ≤ 0 ? 1 : 0 )
1≤i≤n,1≤j≤k,
注意理解pre[i]-pre[i-j]实际上算的是[i-j+1,i]
但是这样的dp是O(nk)肯定超时!!
我们得搞点事,做个数据优化啥的!
在这里插入图片描述
首先我们每个i只会在外层循环1次,找到1~i-1之前加上i后最小的答案
所以就是求dp[i]=min{dp[i-j] + ( pre[i] - pre[i - j] ) ≤ 0 ? 1 : 0}

这就可以想到堆优化,用优先队列维护,每一次就取队列的top
那么意思是我要维护这个队列一定和i是合法的,
而且对答案的值贡献是从小到大的

来思考一下dp[i-j] + ( pre[i] - pre[i - j] ) ≤ 0 ? 1 : 0
发现 ( pre[i] - pre[i - j] ) ≤ 0 对于答案的影响只有1/0
真正影响的是dp[i-j],所以这个队列我们就可以先维护dp[i-j]从小到大
当dp[i-j]相同时,再维护( pre[i] - pre[i - j] ) ≤ 0从小到大

那么我们就把dp值和下标i丢到队列里,让队列帮我们排序就好啦!

代码实现

#include <cstdio>
#include <queue>
using namespace std;
#define MAXN 300005
int n, k;
char s[MAXN];
int dp[MAXN];
int pre[MAXN];
struct node {int val, id;bool operator < ( const node &t ) const {if ( val == t.val )	return pre[id] > pre[t.id];return val > t.val;}
};
priority_queue < node > q;
int main() {scanf ( "%d %d %s", &n, &k, s );for ( int i = 1;i <= n;i ++ ){if ( s[i - 1] == 'H' )pre[i] = pre[i - 1] + 1;elsepre[i] = pre[i - 1] - 1;dp[i] = 0x7f7f7f7f;}q.push ( ( node ) { 0, 0 } );for ( int i = 1;i <= n;i ++ ) {while ( ! q.empty() && q.top().id < i - k ) q.pop();dp[i] = ( pre[i] - pre[q.top().id] <= 0 ) ? q.top().val + 1 : q.top().val; q.push ( ( node ) { dp[i], i } );}printf ( "%d", dp[n] );
}

在这里插入图片描述
日更爆肝!真爱生命!远离熬夜,保健品你值得拥有
在这里插入图片描述
诱人问题都可以留言,我们有缘再见!bye不要太想我我怎么开始满嘴跑火车了?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core + JWT令牌认证 + Vue.js 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...

DncZeus前言关于 DncZeusDncZeus Dnc Zeus"Dnc"--.Net Core 的缩写&#xff1b;"Zeus"--中文译为宙斯&#xff0c;是古希腊神话中的众神之王&#xff0c;奥林匹斯十二主神之首&#xff0c;统治宇宙万物的至高无上的主神&#xff08;在古希腊神话中主神专…

P5081 Tweetuzki爱取球(期望)(线性求逆元)

文章目录题目描述解析代码题目描述 解析 首先有一个很重要的引理&#xff1a; 若一件事做成的概率是p&#xff0c;则其做成需要次数的期望是1/p 为什么呢&#xff1f; 我们设做成这件事的期望次数是x 就可以列出方程&#xff1a; x1p∗0(1−p)∗xx1p*0(1-p)*xx1p∗0(1−p)∗x …

【 CF1186D,E,F】Vus the Cossack and Numbers/Vus the Cossack and a Field/Vus the Cossack and a Graph

太ex了&#xff0c;哭了哭了orz 后面两道平均一道花了我一天啊&#xff01; 文章目录D&#xff1a;Vus the Cossack and Numbers题意翻译题解代码实现E&#xff1a;Vus the Cossack and a Field题意翻译题解代码实现F:Vus the Cossack and a Graph题目暴力题解代码实现官方题解…

IdentityServer4与ocelot实现认证与客户端统一入口

关于IdentityServer4与ocelot博客园里已经有很多介绍我这里就不再重复了。ocelot与IdentityServer4组合认证博客园里也有很多&#xff0c;但大多使用ocelot内置的认证&#xff0c;而且大多都是用来认证API的&#xff0c;查找了很多资料也没看到如何认证oidc&#xff0c;所以这里…

YBTOJ:彩球抽取(期望)

文章目录题目描述解析代码题目描述 解析 首先&#xff0c;可以使用dp解决本题 设fi,j,k&#xff1a;操作i轮之后编号j的小球有k个的概率 转移和统计答案就都不难了 但是还有一个问题 不难发现这个题循环下去是可以无穷无尽的 所以限定一个i的上界&#xff08;如500000&#xf…

魔改森林

题意&#xff1a; 曾经有一道叫做迷雾森林的题目&#xff0c;然而牛牛认为地图中的障碍太多&#xff0c;实在是太难了&#xff0c;所以删去了很多点&#xff0c;出了这道题。 牛牛给出了一个n行m列的网格图 初始牛牛处在最左下角的格点上(n1,1)&#xff0c;终点在右上角的格点…

基于IdentityServer4 实现.NET Core的认证授权

IdentityServer4是什么&#xff1f;IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。OpenID Connect 和 OAuth2.0是什么OpenID Connect:OpenID Connect由OpenID基金会于2014年发布的一个开放标准, 是建立在OAuth …

[COCI 2018#5]Parametriziran

这道题呢&#xff01; 算了&#xff0c;不要让这玩意儿活着祸害众生吧&#xff01;让我们来拯救苍生于苦海之中&#xff01;&#xff01; 骚话连篇ing 题目 由小写英文字母和问号组成的字符串成为参数化单词&#xff08;例如&#xff1a;??cd,bcd,??&#xff09;。如果两…

P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)

传送门 文章目录解析解析 很显然&#xff0c;让马走的话状态记录和转移都会比较复杂 所以转化成让空位跳会更好做一点 但这不是重点 初看本题&#xff0c;其实第一感觉是bfs 但是状态数理论上最差可以达到815&#xff0c;&#xff08;当然基本不可能跑满&#xff09;&#xff…

NumSharp v0.6 科学计算库发布,新增 LAPACK 的线性库支持

NumSharp&#xff08;Numerical .NET&#xff09;可以说是C&#xff03;中的科学计算库。 它是用C&#xff03;编写的&#xff0c;符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码&#xff0c;从而最大限度地借鉴现有大量在python代码的…

[COCI] Zamjena

连这种模拟题都能。。。orz ex&#xff0c;太恶心了&#xff01; 驰骋坑底这么久了&#xff0c;我明白了 开始吧&#xff01;我发誓&#xff0c;这个超级兵&#xff0c;我就算用小书包平A都要A了它 题目 Vlatko喜欢使用整数数组&#xff0c;他在一张纸上写下了两个数组&…

P2601 [ZJOI2009]对称的正方形(二维哈希)(二分)

洛谷传送门 文章目录题目描述解析代码题目描述 解析 做三个hash 分一下正方形边长的奇偶性 然后枚举中心点&#xff0c;二分边长即可 有点类似模拟赛那道红十字的题 我一开始觉得分奇偶好麻烦啊 为什么不直接枚举左上方的点二分呢&#xff1f;awa 很遗憾的是… 那样答案就没有…

初赛—错题集

计算机基础知识 LAN&#xff1a;局域网&#xff0c;WAN&#xff1a;广域网&#xff0c;MAN&#xff1a;城域网 汇编语言是(依赖于具体计算机)的低级程序设计语言 计算机操作的最小时间单位是(时钟周期)。 注意所需空间需要 \(\div 8\) &#xff01;&#xff01;&#xff01;…

.NET Core 和 DevOps

关键要点无论你目前使用什么样的技术栈&#xff0c;DevOps 都是值得一试的。闭源、专有软件和构建过程与 DevOps 实践不兼容。.NET Core 是开源的&#xff0c;是基于 DevOps 构思和构建的。.NET Core CLI 和 Roslyn API 让整个交付流程变得更加开放&#xff0c;且具有更强的适应…

Message Decoding密码翻译

这是一道模拟题ex 其实每一道模拟题都很“简单”&#xff0c; 这道题就是难在读英文题&#xff01;处理输入&#xff01; 真的我竟然花了几个小时就只是为了看懂样例&#xff01;&#xff01;orz 题目大意 考虑下面的01串序列&#xff1a; 0&#xff0c;00&#xff0c;01…

.NET Core开发日志——结构化日志

在.NET生态圈中&#xff0c;最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net。而其后来者&#xff0c;莫过于NLog。Nlog与log4net相比&#xff0c;有一项较显著的优势&#xff0c;它支持结构化日志。结构化日志&#xff0c;也被称为语义化日志。其作用有二&…

YBTOJ 特殊数列(哈希表)

文章目录题目描述解析代码题目描述 解析 应该是哈希表板子题了 选一个1e6左右的质数进行处理即可 其实本质就是链前 没啥特别新鲜的 为什么要写呢&#xff1f; 因为这个东西很早之前看的时候完全没有看懂。。。 代码 #include<bits/stdc.h> using namespace std; #def…

Strange Definition CodeForces - 1471D

题意&#xff1a; 定义数字 x 和 y 是“相邻”的当且仅当 lcm(x,y)/gcd(x,y) 是一个平方数。 给定一个长度为 n 的数组 a。 每过一秒&#xff0c;数组 a 会发生变化&#xff1a;ai 会变成数组 a 中与其“相邻”的所有数字的乘积。 定义 di 为数组 a 中与 ai “相邻” 的数字个…

学习三分 (概念 + 模板 + 例题:曲线)

这好像是我第一次尝试写一个新知识入门 而不是习题解 文章目录三分概念模板例题&#xff1a;曲线题目题解代码实现三分概念 我们都知道&#xff0c;二分是在一个单调函数&#xff08;即一次函数&#xff09;上通过每次查找折半的方式&#xff0c;对答案进行搜索查找。那么&am…

迎元旦,庆surging 1.0发布

一位摄影程序员的独白每个人都有爱好&#xff0c;都有释放压力的活动&#xff0c;而我也不例外&#xff0c;我除了每天上班&#xff0c;周末就会约一群好友去拍妹子&#xff0c;成家后&#xff0c;就改为拍虫子&#xff0c;一拍就到了30岁&#xff0c;到了30岁就感觉到了中年的…