Educational Codeforces Round 91 (Rated for Div. 2) . d Berserk And Fireball
题目链接
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相关推荐
- 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这个时候两 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- 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, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
- 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& ...
- Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp
传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...
- 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_ ...
最新文章
- linux系统桌面缺色,红旗系统如何用?
- Jenkins:配置信息变更历史
- C#判断年份是否为闰年
- 20145233《Java程序设计》课程总结
- 推荐 4 款 MySQL 调优工具,大神都在用!
- Unity3d Fast Indirect illumination Using Two Virtual Spherical Gaussian Lights-Square Enix论文
- 景区门票系统上云 低成本、安全性高
- 符号标志位.进位标志位_功能标志的成本是多少?
- django 1.8 官方文档翻译:2-5-9 条件表达式 1
- springboot的一些小问题
- 【springboot短信收发】
- [CF106C]Buns
- 爱情刚刚开始是最美好的
- mysql中关于表的删除和表中数据的删除
- CORBA的基本内容(上)
- FreeTpye库学习笔记:将矢量字体解析为位图
- js onmousemove使用注意:进入onmousemove不代表移动鼠标
- 二叉树已知前序遍历、中序遍历画出二叉树的形状
- CSS中怎样调整字体之间的间隔
- 人工智能能和人类辩论了;《云网产业发展白皮书》发布