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 = 998244353; int a[100005], S[108], sum[108][2]; queue<int> q[108]; int main(){int n, k, len, Sum[2];scanf("%d%d%d", &n, &k, &len);for(int i = 1; i <= n; i++){scanf("%d", a + i);}if(k == 1){if(len <= n) return puts("0"),0;else return puts("1"),0; }if(len == 1) return puts("0"),0;if(a[1] == -1){for(int i = 1; i <= k; i++) S[i] = sum[i][0] = 1, q[i].push(1);Sum[0] = k;}else S[a[1]] = sum[a[1]][0] = 1, q[a[1]].push(1), Sum[0] = 1;for(int i = 2; i <= n; i++){int ii = i & 1;Sum[ii ^ 1] = 0;if(a[i] == -1){for(int j = 1; j <= k; j++){q[j].push((Sum[ii] - sum[j][ii] + P) % P);sum[j][ii ^ 1] = Sum[ii];if(++S[j] == len) {--S[j];sum[j][ii ^ 1] = (sum[j][ii ^ 1] - q[j].front() + P) % P;q[j].pop();}Sum[ii ^ 1] = (Sum[ii ^ 1] + sum[j][ii ^ 1]) % P;}}else{q[a[i]].push((Sum[ii] - sum[a[i]][ii] + P) % P);sum[a[i]][ii ^ 1] = Sum[ii];if(++S[a[i]] == len) {--S[a[i]];sum[a[i]][ii ^ 1] = (sum[a[i]][ii ^ 1] - q[a[i]].front() + P) % P;q[a[i]].pop();}for(int j = 1; j <= k; j++) if(j != a[i]){while(!q[j].empty()) q[j].pop();sum[j][ii ^ 1] = 0;S[j] = 0;}Sum[ii ^ 1] = sum[a[i]][ii ^ 1];}}printf("%d\n", Sum[((n + 1) & 1)]); }
转载于:https://www.cnblogs.com/mfys/p/10136255.html
Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array相关推荐
- Codeforces Educational Codeforces Round 56 (Rated for Div. 2) 1093F. Vasya and Array
有一个长度为nnn的的数列,aia_iai的值域只有kkk个元素. 一个数列有一些数字已经填上.现在要求数列连续的数字长度不能超过lll,问所有不同的数列的个数有多少个. 1.考虑所有的数字都没填上 ...
- Educational Codeforces Round 73 (Rated for Div. 2) F. Choose a Square 线段树 + 二维转一维
传送门 文章目录 题意: 思路: 题意: 给你nnn个点(xi,yi)(x_i,y_i)(xi,yi),每个点有个价值cic_ici,现在你可以框一个正方形,要求左下角和右上角的坐标(x,y)( ...
- Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索
传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...
- Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...
题目链接: https://codeforces.com/contest/1093/problem/G 题目: 题意: 在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一 ...
- Educational Codeforces Round 41 (Rated for Div. 2) F. k-substrings
F. k-substrings time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...
- Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp
cf传送门 P3643 [APIO2016]划艇 文章目录 题意: 思路: 题意: aia_iai在[li,ri][l_i,r_i][li,ri]等概率随机选一个数,求aaa数组不增的概率. 思 ...
- Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞
传送门 题意: 给一个二进制串aaa,让后定义两个串相似为有至少一个相同位置相等.现在让你找一个字典序最小的长度为kkk的串使其与aaa中每个长度为kkk的字串相似. 思路: 首先我们知道所有可能的串 ...
- Educational Codeforces Round 54 (Rated for Div. 2): E. Vasya and a Tree(DFS+差分)
题意: 给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值 ...
- Educational Codeforces Round 87 (Rated for Div. 2) F. Summoning Minions
题目链接 Polycarp plays a computer game. In this game, the players summon armies of magical minions, whi ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
最新文章
- 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness
- C语言经典例18-求累加和
- 一个毕业生对大学爱情和奋斗的思考!
- 实例构造器和类(引用类型)
- 红帽:IaaS与PaaS齐头并进
- 【JavaScript】查漏补缺 —数组中reduce()方法
- Oracle分析函数Over()
- mysql开启远程可连接
- 10.数据管理(内存,文件锁)
- Unity web聊天通讯功能开发(1)
- 嵌入式学习(三)—— STM32入门
- 倒排索引的MapReduce实现
- Word 公式编辑器: 公式居中,编号居右,带章节号自动更新,且可以交叉引用
- 淘宝账号 支付宝账号 阿里旺旺账号
- 可用于SDR的C语言纠错编码通用算法收集(1)-朴素字典查表BCH纠错
- Linux系统基础小白学习(更新中)
- 舆情监测系统平台对网络舆情监测的作用
- 数据采集—数据采集技术
- python彩色蟒蛇绘制方向_Python绘制彩色蟒蛇
- Unity DOTS系统概览
热门文章
- [case31]dubbo-spring-boot-starter小试牛刀
- 62. KVOController详解
- Laravel Blade 模板用法
- 通信工程领域当前的主流技术及其社会需求调查报告
- Linux之Inode详解 作者:羽飞博客 http://www.opsers.org/
- 做人要有一颗健康的心
- arraylist linkedlist vector 三者区别
- 用 Java 爬小姐姐图片,直接拿来用!这个厉害了。。。
- 自从在 IDEA 中用了热部署神器 JRebel,开发效率提升了 10 倍!
- 一个注解搞定 Spring Boot 日志!还有谁不会?