BZOJ2958 序列染色
果然清华集训的题目。。。显然的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 序列染色的更多相关文章
- bzoj2958: 序列染色(DP)
2958: 序列染色 题目:传送门 题解: 大难题啊(还是我太菜了) %一发大佬QTT 代码: #include<cstdio> #include<cstring> #incl ...
- BZOJ2958 序列染色(动态规划)
令f[i][0/1/2][0/1]表示前i位,不存在满足要求的B串和W串/存在满足要求的B串不存在W串/存在满足要求的B串和W串,第i位填的是B/W的方案数.转移时考虑连续的一段填什么.大讨论一波后瞎 ...
- bzoj2958: 序列染色&&3269: 序列染色
DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...
- BZOJ:2958 序列染色 DP
bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...
- BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)
题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...
- [BZOJ5306][HAOI2018]染色
bzoj luogu Description 给一个长度为\(n\)的序列染色,每个位置上可以染\(m\)种颜色.如果染色后出现了\(S\)次的颜色有\(k\)种,那么这次染色就可以获得\(w_k\) ...
- Solution -「HAOI 2018」「洛谷 P4491」染色
\(\mathcal{Description}\) Link. 用 \(m\) 种颜色为长为 \(n\) 的序列染色,每个位置一种颜色.对于一种染色方案,其价值为 \(w(\text{出现恰 ...
- 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个并行 ...
- bzoj1006 [HNOI2008]神奇的国度
1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2304 Solved: 1043 Description ...
随机推荐
- SVN库迁移整理方法----官方推荐方式
以下是subversion官方推荐的备份方式. 关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd.svnserve 或本地用户在直接访问). 备份svn存储库 #压缩备份 svnadmi ...
- 原!上线遇到的问题, java序列化关键字transient 修饰的属性变成null了
1.问题描述: 某个功能点,user对象 放入session,后再另外地方取出,结果某个字段没有了.再本地和测试环境都是ok的,但是线上环境就是不行. 后来看到这个user对象的那个属性是加了tran ...
- django的restfulapi
Django Rest framework 的流程大概是这样的 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显 ...
- SaltStack系列(四)之实例编写
前面已经介绍的够多了,这里来让我们写一些完整的实例来梳理一下. 强调一下,sls文件的抒写格式都是"-"后面跟一个空格,然后后面跟参数: 然后后面再跟一个空格,然后是要填写的值.但 ...
- R语言apply()函数用法
在R语言的帮助文档里,apply函数的功能是: Retruns a vector or array or list of values obtained by applying a function ...
- activiti整合spring
activiti的配置文件其实就是一份spring的配置文件,只是默认将processEngineConfiguration做为一个bean来读取. 当和spring进一步整合时,需要使用 Sprin ...
- (14)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第二部分
引言 程序截图: 这篇教程是<如何使用Cocos2d-x 3.0制作基于tilemap的游戏>的第二部分.在上一个教程中,我们创建了一个简单的基于tiled地图的游戏,里面有一个忍者在沙漠 ...
- pycharm添加git ignore
pycharm现在提供了git ignore,很方便 从这里下载扩展 https://plugins.jetbrains.com/plugin/7495--ignore 放到pycharm根目录\pl ...
- Java集合转有类型的数组之toArray(T[] a)
在java变成中慎用强制类型转换,尽量使用类自带的转换函数或泛型.先看一行代码 错误方法: String[] array= (String[]) list.toArray(); 如果list中存放的是 ...
- 「翻译」一篇redis文章引发的翻译——JVM能支持多少线程?
昨天看了一篇关于redis 的文章https://www.cnblogs.com/fanwencong/p/5782860.html 作者说他模拟了100万线程的并发,我对这个有一些怀疑,看了评论也有 ...