Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array
题意:长度为n的数组,数组中的每个元素的取值在1-k的范围内或者是-1,-1代表这个元素要自己选择一个1-k的数字去填写,然后要求填完的数组中不能出现连续长度大于len的情况,询问填空的方案数。
题解:初始思想是设置一个dp[][],数组第一维代表当前连续长度,第二维代表选择的数字。那最终答案就是最后的dp数组元素之和。
然后考虑更新这个数组:
当前元素是-1的话,那么对于每个dp[1][x] (1<=x<=k),他就是上一次dp数组元素之和 - 上一次符合dp[i][x]的元素之和(也就是去掉自己,把别的都加上)。
对于每个dp[i][x] (1<i<len, 1<=x<=k),他就是上一次对应的dp[i - 1][x]。①
当前元素不是-1,那么对于当前元素对应的值x,更新方法是一样的。与此同时,把别的不等于当前元素的值的dp数组清空。
接着考虑len的限制,那么len的限制其实就是要我们在更新dp的同时,去掉某个元素连续长度大于等于len的部分。②
也就是说对于更新提出了两个要求,第一个就是可以快速滑动(①要求),第二个就是快速删除位于一端的数字(②要求),那么队列可以很好的满足要求。
#include<bits/stdc++.h>
using namespace std;
const int P = ;
int a[], S[], sum[][];
queue<int> q[];
int main(){
int n, k, len, Sum[];
scanf("%d%d%d", &n, &k, &len);
for(int i = ; i <= n; i++){
scanf("%d", a + i);
}
if(k == ){
if(len <= n) return puts(""),;
else return puts(""),;
}
if(len == ) return puts(""),;
if(a[] == -){
for(int i = ; i <= k; i++) S[i] = sum[i][] = , q[i].push();
Sum[] = k;
}
else S[a[]] = sum[a[]][] = , q[a[]].push(), Sum[] = ; for(int i = ; i <= n; i++){
int ii = i & ;
Sum[ii ^ ] = ;
if(a[i] == -){
for(int j = ; j <= k; j++){
q[j].push((Sum[ii] - sum[j][ii] + P) % P);
sum[j][ii ^ ] = Sum[ii];
if(++S[j] == len) {
--S[j];
sum[j][ii ^ ] = (sum[j][ii ^ ] - q[j].front() + P) % P;
q[j].pop();
}
Sum[ii ^ ] = (Sum[ii ^ ] + sum[j][ii ^ ]) % P;
}
}
else{
q[a[i]].push((Sum[ii] - sum[a[i]][ii] + P) % P);
sum[a[i]][ii ^ ] = Sum[ii];
if(++S[a[i]] == len) {
--S[a[i]];
sum[a[i]][ii ^ ] = (sum[a[i]][ii ^ ] - q[a[i]].front() + P) % P;
q[a[i]].pop();
}
for(int j = ; j <= k; j++) if(j != a[i]){
while(!q[j].empty()) q[j].pop();
sum[j][ii ^ ] = ;
S[j] = ;
}
Sum[ii ^ ] = sum[a[i]][ii ^ ];
}
}
printf("%d\n", Sum[((n + ) & )]);
}
Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array的更多相关文章
- Educational Codeforces Round 56 (Rated for Div. 2) F - Vasya and Array dp好题
F - Vasya and Array dp[ i ][ j ] 表示用了前 i 个数字并且最后一个数字是 j 的方案数. dp[ i ][ j ] = sumdp [i - 1 ][ j ], 这样 ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块
Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ...
- Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))
题目链接: https://codeforces.com/contest/1093/problem/G 题目: 题意: 在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一 ...
- Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 && DFS】
传送门:http://codeforces.com/contest/1093/problem/D D. Beautiful Graph time limit per test 2 seconds me ...
- Educational Codeforces Round 56 (Rated for Div. 2) ABCD
题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次 ...
- Educational Codeforces Round 56 (Rated for Div. 2) D
给你一个无向图 以及点的个数和边 每个节点只能用1 2 3 三个数字 求相邻 两个节点和为奇数 能否构成以及有多少种构成方法 #include<bits/stdc++.h> usin ...
- Educational Codeforces Round 56 (Rated for Div. 2)
涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstd ...
- Educational Codeforces Round 56 (Rated for Div. 2) E(1093E) Intersection of Permutations (树套树,pb_ds)
题意和分析在之前的链接中有:https://www.cnblogs.com/pkgunboat/p/10160741.html 之前补题用三维偏序的cdq的分治A了这道题,但是感觉就算比赛再次遇到类似 ...
随机推荐
- css之颜色表示法
css之颜色表示法 十六进制颜色 所有浏览器都支持十六进制颜色值. 十六进制颜色是这样规定的:#RRGGBB,其中的 RR(红色).GG(绿色).BB(蓝色)十六进制整数规定了颜色的成分.所有值必须介 ...
- 截取nginx日志
截取nginx日志 sed -n '/24\/Feb\/2017:11:00:00/,/24\/Feb\/2017:12:00:00/p' yunying_api.wanglibao.com.acce ...
- mac OS 安装 Subversion JavaHL 客户端
JavaHL原来官网 http://subclipse.tigris.org/wiki/JavaHL 目前已经全部转移到github 官方说明很详细 https://github.com/subcl ...
- 人工智能与VR结合:带来体验多样性
人工智能服务--微软认知服务(Microsoft Cognitive Services)最初包括视觉.语音.语言.知识和搜索五大类共 21 项 API.应用了这些 API 的系统能看.能听.能说话,并 ...
- Python开源框架总结
Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...
- 4.shell基本操作简介
判断一个命令是不是内置命令,可以用type命令 1.printf :冒号 #:〉 test.txt 这里会建立一个空文件test.txt set -o|grep emacs 查看 emacs 模式是 ...
- 聚集表(clustered table)data page中的数据行可以无序
误区 一直以为只要一个表含有聚集索引,那么在data page中的数据行是排序的.比如原来data page中有1.2.4.5.6这样四条记录,那么我要插入3这条记录,应该是先将456三条记录往后移, ...
- Simple Math Problems
整理下<算法笔记>,方便查看. 一.最大公约数&最小公倍数 欧几里得定理:设a,b均为正整数,那么gcd(a,b)=gcd(b,a%b). 若,定理就先交换a和b. 注意:0和任意 ...
- 精通awk系列文章
精通awk系列文章 我录制了两个awk相关的视频教程: Awk经典实战案例精讲 精通awk精品课程:awk从入门到精通 1.安装新版本的gawk 2.本教程测试所用示例文件 3.铺垫知识:读取文件的几 ...
- System.Linq.Dynamic字符串转委托
以前一直想着有没有一个方法能够把字符串直接转化成函数的,刚好有需求就找了下,还真有. 微软地址:https://docs.microsoft.com/en-us/previous-versions/b ...