AtCoder Beginner Contest 249题解(E,F)
E - RLE
题目大意:有一个长度为 N 的只含有小写字母字符串 S ,将S中连续相同的字母用计数法表示,如 aaa -> a3,
aaabbbcc -> a3b3c2。现在要求用计数法表示后长度严格小于原来长度的 S 数量,要求对P取模。
分析:考虑动态规划:
设 f[ i ] [ j ]为 长度为 i 的字符串 用计数法表示后长度为 j 的数量 。
sum[ i ] [ j ] 为法 f[ i ] [ j ] 前缀和。
当从最开始放字母时 可以放26种,若不是开始,要与前面的不同,只能放25种。
因为 n最多为2000 ,所以最多只有以下四种情况:
(1)放入长度为 1~9 的连续字符串 ,用计数法表示后长度为 2。
(2)放入长度为 10~99 的连续字符串 ,用计数法表示后长度为 3。
(3)放入长度为 100~999 的连续字符串 ,用计数法表示后长度为 4。
(4)放入长度为 1000~9999 的连续字符串 ,用计数法表示后长度为 5。
然后注意一下边界即可,具体转移见代码:
int main(){ios::sync_with_stdio(0),cin.tie(0);cout << fixed << setprecision(7);int n;cin >> n >> mod;vector<vector<modint>> f(n+1,vector<modint>(n+1,0));vector<vector<modint>> sum(n+1,vector<modint>(n+1,0));for(int i=1;i<=n;i++){int k=1+to_string(i).size();if(k<n){f[i][k]+=26;//从头开始放}for(int j=2;j<n;j++){f[i][j] += 25*(sum[max(0,i-1)][max(0,j-2)] - sum[max(0,i-10)][max(0,j-2)]);//第一种情况f[i][j] += 25*(sum[max(0,i-10)][max(0,j-3)] - sum[max(0,i-100)][max(0,j-3)]);//第二种情况f[i][j] += 25*(sum[max(0,i-100)][max(0,j-4)] - sum[max(0,i-1000)][max(0,j-4)]);//第三种情况f[i][j] += 25*(sum[max(0,i-1000)][max(0,j-5)] - sum[max(0,i-10000)][max(0,j-5)]);//第四种情况sum[i][j] = sum[i-1][j] + f[i][j];}}modint ans;for(int i=1;i<n;i++){ans+=f[n][i];}cout << ans.val();return 0;
}
F - Ignore Operations
题目大意:最初 x 为 0 ,有 N 个操作 ,操作有2种类型:
(1) y 替换 x
(2) x 加上y
你可以跳过最多k次操作,求操作完后最大的 x。
分析:考虑贪心。
假如后面有操作1不跳过,前面的操作不用跳了(没必要),所以当考虑某个操作1不跳时,后面的操作1必须全跳。
我们从后往前枚举第i的操作1不跳,把后面操作2为负数的用一个大根堆维护(正数直接加就好了),大小为 k - (已经跳过的操作1个数),然后更新最大值就可以了,具体见代码。
int main(){ios::sync_with_stdio(0),cin.tie(0);cout << fixed << setprecision(7);int n,k;cin >> n >> k;vector<pii> a(n+1);for(int i=1;i<=n;i++) cin >> a[i].fi >> a[i].se;a[0] = {1,0};priority_queue<int> pq;LL sum=0,psum=0,ans=-1e18;for(int i=n;i>=0;i--){int op=a[i].fi,x=a[i].se;if(op==1){ans = max(ans,x+sum-psum);if(k==0) break;k--;if(pq.size()>k){psum-=pq.top();pq.pop();}}else{if(x<0){if(pq.size()<k){psum+=x;pq.push(x);}else if(pq.size()&&pq.top()>x){psum-=pq.top();pq.pop();pq.push(x);psum+=x;}}sum+=x;}}cout << ans << '\n';return 0;
}
AtCoder Beginner Contest 249题解(E,F)相关推荐
- AtCoder Beginner Contest 197 题解(A ~ F)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...
- AtCoder Beginner Contest 198 (A ~ F)题解
目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...
- Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解
Caddi Programming Contest 2021(AtCoder Beginner Contest 193) A - Discount 打折浮点数除即可 B - Play Snuke 枚举 ...
- Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解
文章目录 A - Health M Death B - Many Oranges C - Comma D - Shipping Center E - Lucky 7 Battle F - Coprim ...
- AtCoder Beginner Contest 096 题解
比赛地址 https://abc096.contest.atcoder.jp A - Day of Takahashi 题目大意 我们把月和日相同的日期叫做"Takahashi日" ...
- [2021-09-04 AtCoder Beginner Contest 217] 题解
文章目录 A - Lexicographic Order B - AtCoder Quiz C - Inverse of Permutation D - Cutting Woods E - Sorti ...
- AtCoder Beginner Contest 168题解
这里写目录标题 A - ∴ (Therefore) 代码 B - ... (Triple Dots) 代码 C - : (Colon) 代码 D - .. (Double Dots) 题意 题解 代码 ...
- AtCoder Beginner Contest 153 题解
题解链接:题解链接 RD是输入,OT是输出 A – SERVAL VS MONSTER 链接: A题 题意: 给你怪物血量H和攻击一次扣A血,问至少要攻击几次能使怪物的血量小于或者等于0 解法: 按题 ...
- AtCoder Beginner Contest 177 题解
希望更好的阅读体验?点这里 一.题解 A.Don't be late 题目大意: 高桥君计划在 TTT 分钟内于离家 DDD 米的地方与青木君碰面,已知高桥君速度为 SSS,问他能否在 TTT 分钟内 ...
最新文章
- android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
- 在抛弃 MVP-Clean 后,我自主设计并开源了 Viabus 架构
- 简单查找,如果找到返回下标,如果找不到返回-1
- C语言实现二叉树(附完整源码)
- @async注解_SpringBoot中Async异步方法和定时任务介绍
- DELL服务器T410进行系统修复,ibm T410 BIOS修复过程-BIOS维修网站www.biosrepair.com
- MySQL启动很慢的原因
- 添加多个tomcat服务目录
- 分布式系统以及CAP原理
- SK海力士CEO前往日本 解决关键半导体原材料供应问题
- kallsyms 压缩_initrd.img、System.map学习札记
- 机器学习算法汇总:人工神经网络、深度学习及其它
- 文档流、脱离文档流分析
- 15. JavaScript Array(数组)对象
- 计算机网络性能常见计算公式
- 密码编码学与网络安全(学习)
- 4244. 【五校联考6day2】yi
- Auto CAD:图纸材质图例(石材、瓷砖、细木工板、钢筋混凝土、 木材、夹板、黏土砖 镜面/玻璃、软质吸音层 、钢/金属、硬质吸音层、硬隔层、基层龙骨、陶质类、涂料粉刷层)的设置之详细攻略
- Unity中Obi绳子设置
- 这次我真心想告诉你:分手吧!
热门文章
- 机器视觉 零基础Python+OpenCV+MediaPipe手势识别教程(一)手势识别基础入门
- 微星笔记本win10装Ubuntu18+NVIDIA驱动+cuda+cudnn+tensorRT+搜狗
- arcgis打开mdb数据库_操作方法:在 ArcGIS 中连接至 Microsoft Access 2007 / 2010 (ACCDB) 文件...
- 利达主机联网接线端子_利达接线图介绍
- 超全,Python 量化金融库汇总!
- 二次元博客php,Mokore: Wordpress二次元简约个人博客主题by江程训
- java 公历 农历_Java给定公历日期计算相应农历/阴历日期
- python基本语法学习笔记
- 关于有刷直流电机,你需要了解这些
- 简历中的“自我评价“怎么写?记录一个满分模板