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)相关推荐

  1. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

  2. AtCoder Beginner Contest 198 (A ~ F)题解

    目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...

  3. Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解

    Caddi Programming Contest 2021(AtCoder Beginner Contest 193) A - Discount 打折浮点数除即可 B - Play Snuke 枚举 ...

  4. 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 ...

  5. AtCoder Beginner Contest 096 题解

    比赛地址 https://abc096.contest.atcoder.jp A - Day of Takahashi 题目大意 我们把月和日相同的日期叫做"Takahashi日" ...

  6. [2021-09-04 AtCoder Beginner Contest 217] 题解

    文章目录 A - Lexicographic Order B - AtCoder Quiz C - Inverse of Permutation D - Cutting Woods E - Sorti ...

  7. AtCoder Beginner Contest 168题解

    这里写目录标题 A - ∴ (Therefore) 代码 B - ... (Triple Dots) 代码 C - : (Colon) 代码 D - .. (Double Dots) 题意 题解 代码 ...

  8. AtCoder Beginner Contest 153 题解

    题解链接:题解链接 RD是输入,OT是输出 A – SERVAL VS MONSTER 链接: A题 题意: 给你怪物血量H和攻击一次扣A血,问至少要攻击几次能使怪物的血量小于或者等于0 解法: 按题 ...

  9. AtCoder Beginner Contest 177 题解

    希望更好的阅读体验?点这里 一.题解 A.Don't be late 题目大意: 高桥君计划在 TTT 分钟内于离家 DDD 米的地方与青木君碰面,已知高桥君速度为 SSS,问他能否在 TTT 分钟内 ...

最新文章

  1. android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
  2. 在抛弃 MVP-Clean 后,我自主设计并开源了 Viabus 架构
  3. 简单查找,如果找到返回下标,如果找不到返回-1
  4. C语言实现二叉树(附完整源码)
  5. @async注解_SpringBoot中Async异步方法和定时任务介绍
  6. DELL服务器T410进行系统修复,ibm T410 BIOS修复过程-BIOS维修网站www.biosrepair.com
  7. MySQL启动很慢的原因
  8. 添加多个tomcat服务目录
  9. 分布式系统以及CAP原理
  10. SK海力士CEO前往日本 解决关键半导体原材料供应问题
  11. kallsyms 压缩_initrd.img、System.map学习札记
  12. 机器学习算法汇总:人工神经网络、深度学习及其它
  13. 文档流、脱离文档流分析
  14. 15. JavaScript Array(数组)对象
  15. 计算机网络性能常见计算公式
  16. 密码编码学与网络安全(学习)
  17. 4244. 【五校联考6day2】yi
  18. Auto CAD:图纸材质图例(石材、瓷砖、细木工板、钢筋混凝土、 木材、夹板、黏土砖 镜面/玻璃、软质吸音层 、钢/金属、硬质吸音层、硬隔层、基层龙骨、陶质类、涂料粉刷层)的设置之详细攻略
  19. Unity中Obi绳子设置
  20. 这次我真心想告诉你:分手吧!

热门文章

  1. 机器视觉 零基础Python+OpenCV+MediaPipe手势识别教程(一)手势识别基础入门
  2. 微星笔记本win10装Ubuntu18+NVIDIA驱动+cuda+cudnn+tensorRT+搜狗
  3. arcgis打开mdb数据库_操作方法:在 ArcGIS 中连接至 Microsoft Access 2007 / 2010 (ACCDB) 文件...
  4. 利达主机联网接线端子_利达接线图介绍
  5. 超全,Python 量化金融库汇总!
  6. 二次元博客php,Mokore: Wordpress二次元简约个人博客主题by江程训
  7. java 公历 农历_Java给定公历日期计算相应农历/阴历日期
  8. python基本语法学习笔记
  9. 关于有刷直流电机,你需要了解这些
  10. 简历中的“自我评价“怎么写?记录一个满分模板