题目链接

https://codeforces.ml/contest/1380/problem/D

前天的cf 到现在才a 我好菜啊 菜鸡爆哭
又是一场unrated 这两天cf测评机炸一场,网站炸一场
就不让人打呗 像掉分都不让

题目思路

题目给出两个数组a,b
给出两种方式将a变成b
第一种是直接将连续的区间长度为k的区间清除 费用为k
第二种是选取两个连续的数 清除小的那个
求把a变成b的最小消费
如果无法将a变成b
则输出-1

这题就直接模拟就好了
但是写不来模拟的我真是写到想死 说到底还是题做少了
首先先判断b上的数大致位置是否和a中一样
如果一样再继续
遍历所有区间
对于不同的区间长度 大体可以分成两类
小于k 和大于等于k的

如果小于k时 只能用第二种方法
但如果此区间中最大值大于区间最近的左值和右值的话
这个区间是无法完全清除的
所以需要记录区间最大值 判断这种情况
如果可以请除 那么这一区间的话费是len*y

当区间长度大于等于k时
两种方法都能做
就先按照比较一二两种方式谁更划算
即比较x和k*y的值
小于等于的话只用第一种方法就好了
花费为len/k+x
大于的话在判断如果此区间是无法完全用第二种方法清除的话(见上一种情况)
我们先就先用第一种方式消去包含最大值的区间 再用第二种就好了
花费为(len-k) * y+x
否则直接用第二种方式清除即可
花费为len * y
还有就是在比较之前可以先将长度除以k的余数用第二种方式清除
具体细节见代码和注释

ac代码

 #include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <utility>
#define pi 3.1415926535898
#define ll long long
#define lson rt<<1
#define rson rt<<1|1
#define eps 1e-6
#define ms(a,b) memset(a,b,sizeof(a))
#define legal(a,b) a&b
#define print1 printf("111\n")
using namespace std;
const int maxn = 2e5+10;
const int inf = 0x1f1f1f1f;
const int mod = 2333;ll a[maxn],pos[maxn],b[maxn];int main()
{//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);int n,m;scanf("%d%d",&n,&m);ll x,k,y;scanf("%lld%lld%lld",&x,&k,&y);for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);pos[a[i]]=i;//将a数组中的值的位置记录下来 方便之后的判断和找区间}a[n+1]=-inf;//这里是当做最后一个区间的右端点 之前写的inf 一直wa 后来发现这样会影响到后面判断区间是否能完全清除 改成了-inf就过了for(ll i=1;i<=m;i++){scanf("%lld",&b[i]);}ll flag=0;for(ll i=1;i<m;i++){if(pos[b[i]]>pos[b[i+1]])flag=1;}if(flag==1)printf("-1\n");else{ll l=0,r=0;ll ans=0;for(ll i=1;i<=m+1;i++){if(i==m+1)r=n+1;elser=pos[b[i]];if(r-l-1>0)//判断这一段是否有区间需要被消除{ll maxx=0;for(ll j=l+1;j<=r-1;j++){maxx=max(a[j],maxx);}if(maxx<a[l]|maxx<a[r])//判断区间能否被完全清除flag=0;elseflag=1;if(r-l-1<k){if(flag==1){printf("-1\n");return 0;}elseans+=(r-l-1)*y;}else{ll len=r-l-1;ll tem=len%k;ans+=tem*y;len-=tem;if(x<=k*y){ans+=len/k*x;}else if(flag){ans+=(len-k)*y+x;}else{ans+=len*y;}flag=0;}}l=r;}printf("%lld\n",ans);}
}

这种模拟还是挺考验码力的 有些细节写搓了就会wa到死 还很难发现
还是要多刷题 码力不够

Educational Codeforces Round 91 (Rated for Div. 2) . d Berserk And Fireball相关推荐

  1. 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这个时候两 ...

  2. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  3. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  4. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  5. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  6. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  7. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  8. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai​,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai​!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  10. Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路: 首先需要发现一些性质,假设preipre_ ...

最新文章

  1. linux系统桌面缺色,红旗系统如何用?
  2. Jenkins:配置信息变更历史
  3. C#判断年份是否为闰年
  4. 20145233《Java程序设计》课程总结
  5. 推荐 4 款 MySQL 调优工具,大神都在用!
  6. Unity3d Fast Indirect illumination Using Two Virtual Spherical Gaussian Lights-Square Enix论文
  7. 景区门票系统上云 低成本、安全性高
  8. 符号标志位.进位标志位_功能标志的成本是多少?
  9. django 1.8 官方文档翻译:2-5-9 条件表达式 1
  10. springboot的一些小问题
  11. 【springboot短信收发】
  12. [CF106C]Buns
  13. 爱情刚刚开始是最美好的
  14. mysql中关于表的删除和表中数据的删除
  15. CORBA的基本内容(上)
  16. FreeTpye库学习笔记:将矢量字体解析为位图
  17. js onmousemove使用注意:进入onmousemove不代表移动鼠标
  18. 二叉树已知前序遍历、中序遍历画出二叉树的形状
  19. CSS中怎样调整字体之间的间隔
  20. 人工智能能和人类辩论了;《云网产业发展白皮书》发布

热门文章

  1. 萤火虫小巷2(看完了)
  2. Wex5打包报错的解决办法
  3. Unity Shader Color、HSV、HDRColor以及HDRColor面板转换源码分析
  4. Steam安装游戏时,无法选择C盘(无法选择其他盘(盘符))
  5. 4k纸是几厘米乘几厘米_4K纸是多少尺寸
  6. 从零开始学WEB前端——HTML实战练习
  7. 技术设计的任务是将功能原理方案得以具体化
  8. dpdk 源码分析 rte_ring
  9. 给硬件工程师的入门课-系统框图的设计
  10. 机房合作—SVN skipped remains conflicted