这道题可以比较容易看出是线性DP。设dp[i]代表把前i个格子刷成目标状态的最小步数。

写出状态转移方程 dp[i]=min( dp[j]+calc(j+1,i) ) (i-j<=k) calc(j+1,i)代表把区间 [j+1,i] 的块刷成目标状态的最小代价。

那么问题在于怎么算calc(j+1,i)。这里直接给出结论:calc=(s[i]-s[j])/2+1,意思是最小代价是先把区间[j+1,i]刷成段数比较多的那种颜色,然后再一段一段把段数较小的刷好。代价就是1+(s[i]-s[j])/2。

把方程拆开  2*f[i]=2*f[j]+s[i]-s[j]+2     f[i]=(s[i]+(2*f[j]-s[j])+2) / 2

观察式子发现只有  2*f[j]-s[j] 跟j相关,并且j的取值上下界都在变化。容易想到用单调队列优化。

这里还要主要一个小细节:例如 BBBWWW  那么s的值就是 111222  。此时s[5]-s[2]=1,事实上[3,4,5]这一段应该是两段组成,s[5]-s[2]应该等于2 。

所以要加入  if (s[i]==s[i+1]) s[i]--;   这一句代码。意思是i点还不是该段结尾点,i+1及后面还会有这一段的残余,然后令s[i]-1使得后面的s[p]减去s[i]的时候会算上这一段残余段(比较难表达,但就是这个意思qwq)。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+;
int n,k,f[N],s[N],q[N];
char A[N],B[N]; int calc(int j) { return *f[j]-s[j]; } int main()
{
cin>>n>>k;
scanf("%s",A+); scanf("%s",B+);
for (int i=;i<=n;i++) if (B[i]!=B[i-]) s[i]=;
for (int i=;i<=n;i++) s[i]+=s[i-]; int h=,t=; q[]=;
for (int i=;i<=n;i++) {
while (h<=t && i-q[h]>k) h++;
if (h<=t) f[i]=(s[i]+calc(q[h])+)/;
if (A[i]==B[i]) f[i]=f[i-];
if (s[i]==s[i+]) s[i]--; //这一句很重要
while (h<=t && calc(i)<=calc(q[t])) t--;
q[++t]=i;
}
cout<<f[n]<<endl;
return ;
}

2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest E:Black or White的更多相关文章

  1. 2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest

    2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest A Secret of Chocolate Poles 思路:暴力枚举黑巧克力的个数和厚黑巧克力的个 ...

  2. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  3. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  4. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  5. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  6. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  7. Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP

    题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...

  8. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...

  9. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

随机推荐

  1. 小程序中this.setData的使用和注意事项

    前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正. ...

  2. elasticsearch 父子关系

    ElasticSearch 中的Parent-Child关系和nested模型是相似的, 两个都可以用于复杂的数据结构中,区别是 nested 类型的文档是把所有的实体聚合到一个文档中而Parent- ...

  3. thinkphp5 自动注册Hook机制钩子扩展

    Hook.php 文件已更新1.修复在linux环境下类的 \ 在basename 下无法获取到类名的问题2.修复linux 环境下无法使用hook::call 调用失败问题 请先安装thinkphp ...

  4. Java多线程的理解和实例

    编写具有多线程程序经常会用到的方法:run(), start(), wait(), notify(), notifyAll(), sleep(), yield(), join() 还有一个关键字:sy ...

  5. PHP数组函数实现栈与队列的方法介绍(代码示例)

    根据php提供的四个关于数组的函数: array_push(),array_pop(),array_unshift(),array_shift() 配合数组本身,一下子就实现了栈(stack)和队例( ...

  6. php 字符转成数字

    1.第一种转换方式:在要转换的变量之前加上用括号括起来的目标类型,如 (int):(bool):(float):(string):(array):(object) 2.第二种转换方式:使用3个具体类型 ...

  7. comet4j js中写法

    <script type="text/javascript" src="${ctxStatic}/common/js/comet4j.js">< ...

  8. SQL IN 运算符

    SQL IN 运算符 IN运算符允许您在WHERE子句中指定多个值. IN运算符是多个OR条件的简写. SQL IN 语法 SELECT column_name(s) FROM table_name ...

  9. POJ 2528(线段树+离散化+特殊离散化)网上博客很少有人真正写对!!! 是POJ数据太水...

    Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...

  10. 阿里云Linux服务器购买、配置

    购买.配置阿里云Linux服务器配置ftp发布网站全教程 http://blog.csdn.net/Jolesen/article/details/77505840