果然清华集训的题目。。。显然的DP题但是不会做。。。

我们令f[i][j][w]表示状态方程

w表示到了字符串的第w个

i = 0, 1, 2分别表示k个B和k个W都没填上、k个B填上了k个W没填上、k个B和k个W都填上了三种状态

j = 0, 1分别表示第w位上填B/W

于是方程就比较容易列出来了,注意要用到容斥原理

 /**************************************************************
Problem: 2958
User: rausen
Language: C++
Result: Accepted
Time:652 ms
Memory:33032 kb
****************************************************************/ #include <cstdio> using namespace std;
const int N = ;
const int mod = 1e9 + ; int n, k;
char st[N];
int s0[N], s1[N], f[][][N]; void read_in() {
int i;
char ch = getchar();
while (ch != 'W' && ch != 'B' && ch != 'X')
ch = getchar();
for (i = ; i <= n; ++i)
st[i] = ch, ch = getchar();
} inline int calc(char c, int *s, int i, int t) {
if (i < k || st[i - k] == c || s[i] - s[i - k]) return ;
return f[t - ][i == k ? : - t][i - k];
} int main() {
int i;
scanf("%d%d", &n, &k);
read_in();
f[][][] = ;
for (i = ; i <= n; ++i) {
s0[i] = s0[i - ] + (st[i] == 'W');
s1[i] = s1[i - ] + (st[i] == 'B');
if (st[i] != 'W') {
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] - calc('B', s0, i, ) + mod) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] + calc('B', s0, i, )) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ]) % mod;
}
if (st[i] != 'B') {
f[][][i] = (0ll + f[][][i - ] + f[][][i - ]) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] - calc('W', s1, i, ) + mod) % mod;
f[][][i] = (0ll + f[][][i - ] + f[][][i - ] + calc('W', s1, i, )) % mod;
}
}
printf("%d\n", (f[][][n] + f[][][n]) % mod);
return ;
}

(p.s. Orz 江哥...)

BZOJ2958 序列染色的更多相关文章

  1. bzoj2958: 序列染色(DP)

    2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...

  2. BZOJ2958 序列染色(动态规划)

    令f[i][0/1/2][0/1]表示前i位,不存在满足要求的B串和W串/存在满足要求的B串不存在W串/存在满足要求的B串和W串,第i位填的是B/W的方案数.转移时考虑连续的一段填什么.大讨论一波后瞎 ...

  3. bzoj2958: 序列染色&&3269: 序列染色

    DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...

  4. BZOJ:2958 序列染色 DP

    bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...

  5. BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)

    题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...

  6. [BZOJ5306][HAOI2018]染色

    bzoj luogu Description 给一个长度为\(n\)的序列染色,每个位置上可以染\(m\)种颜色.如果染色后出现了\(S\)次的颜色有\(k\)种,那么这次染色就可以获得\(w_k\) ...

  7. Solution -「HAOI 2018」「洛谷 P4491」染色

    \(\mathcal{Description}\)   Link.   用 \(m\) 种颜色为长为 \(n\) 的序列染色,每个位置一种颜色.对于一种染色方案,其价值为 \(w(\text{出现恰 ...

  8. 2016 Multi-university training contest

    day 1 A 给G,w(e)1M(diff),|V|100K,|E|1M,求 MST MST上任意两点间距离的期望 显然MST唯一 E(dis(u,v))可以通过计算每条边的贡献加出来 B n个并行 ...

  9. bzoj1006 [HNOI2008]神奇的国度

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2304  Solved: 1043 Description ...

随机推荐

  1. boost.sha1

    #include <boost/uuid/sha1.hpp> #include <iostream> /* @brief SHA1摘要算法:一种很重要的密码学算法,可将任意长度 ...

  2. Openstack(十六)实现内外网结构

    类似于阿里云ECS主机的内外网(双网卡不通网段)的结构,最终实现内外网区分隔离. https://www.aliyun.com/product/ecs/?utm_medium=text&utm ...

  3. Python第二弹--------类和对象

    Python中的任何一条数据都是对象.每个对象都由3部分组成:标识.类型和值.对象的标识代表该对象在内存中的存储位置(因此是不可更改的),对象的类型表明它可以拥有数据和值的类型. 创建 Dog 类根据 ...

  4. git配置文件

    在用git开发项目的时候,今天出现一个项目的文件权限发生变化的时候,没有忽略,用了以前同事给的命令行忽略权限变化的文件 git config --global core.filemode false; ...

  5. hdu5073 贪心

    这题说的是给了 n个值每个值 然后 他们的品均值 作为中点 然后每个点到中点的均值的平方 和最小值是多少 有 k 个点可以重新 放过位置 , 这样我们 应该 会选 最近的那个 n-k个点 然后 取他们 ...

  6. 独家揭秘,106岁的IBM靠什么完成了世纪大转型|钛度专访

    IBM大中华区董事长陈黎明 到2017年2月,陈黎明就担任IBM大中华区董事长整整两年了. 五年前,IBM历史上首位女CEO也是第9位CEO罗睿兰上任,三年前,IBM在罗睿兰的带领下以数据与分析.云. ...

  7. “System.Runtime.InteropServices.COMException (0x80070422): 无法启动服务”解决方法

    应用程序中发生了无法处理的异常.如果单击“退出”,应用程序将立即关闭.无法启动服务,原因可能是已被禁用或其相关联设备没有启动.(异常来自HRESULT:0X80070422).点击详细内容:有关调用实 ...

  8. 《Java入门第二季》第二章 封装

    什么是java中的封装1.封装的概念:隐藏信息.隐藏具体的实现细节. 2.封装的实现步骤: 1)修改属性的可见性,private.2)创建修改器方法和访问器方法,getXXX/setXXX.(未必一定 ...

  9. Sybase数据库常用函数

    Sybase数据库常用函数 一.字符串函数 1,ISNULL(EXP1,EXP2,EXP3,...) :返回第一个非空值,用法与COALESCE(exp1,exp2[,exp3...])相同: 2,T ...

  10. 端口安全检查shell脚本

    #!/bin/bash #This script name is scan_analyse.sh . /etc/profile echo "start time is $(date)&quo ...