题意:
n个战士排成一排,分别有个武力值ai。你有两种法术,一个是火球(花费x个法力,消灭连续k个战士),一个是激怒(花费y个法力,选择相邻两个战士,武力值大的会消灭武力值小的)。求最后留下的战士排列成bi需要的最小法力花费

思路:
因为每个数都不同,所以肯定是划分成多个区间,对每个区间进行操作。
1)1)1) 如果当前区间的长度 len<klen < klen<k :
①区间最大值大于左右端点,那么无解。因为无法消去最大值。
②区间最大值小于等于左右端点,消费就是 len∗ylen*ylen∗y
2)2)2) 如果当前区间的长度 len≥klen ≥ klen≥k :
①区间最大值大于左右端点,那么必须花费一个 xxx ,来把最大值消掉。如果火球更优,那么答案就是 len/k∗x+(len%k)∗ylen/k*x + (len\%k)*ylen/k∗x+(len%k)∗y。可以用最大值把 len%klen\%klen%k 个战士消掉,然后用火球消去连续的 k 。一定有解。如果激怒更优,那么答案就是 x+(len−k)∗yx + (len-k)*yx+(len−k)∗y
②区间最大值小于左右端点,不是必须花费 xxx ,则就直接判断哪种方式更优,同上。

代码有点细节

code

#include<bits/stdc++.h>
using namespace std;
const int man = 2e5+10;
#define ll long long
int a[man],b[man];signed main() {int n,m;scanf("%d%d",&n,&m);int x,k,y;scanf("%d%d%d",&x,&k,&y);for(int i = 1;i <= n;++i)scanf("%d",a+i);for(int i = 1;i <= m;++i)scanf("%d",b+i);a[n+1] = b[m+1] = -1;ll ans = 0;for(int i = 1,j = 0;i <= m+1;++i){int l = j+1,r = j+1,len = 0,maxx =-1;while(r<=n+1&&a[r]!=b[i])maxx = max(maxx,a[r]),r++;if(r>n+1){ans = -1;break;}len = r - l;if(len<k){if(maxx>max(a[l-1],a[r])){ans = -1;break;}else ans += 1ll*y*len;}else{if(maxx>max(a[l-1],a[r])){ans += 1ll*x;len -= k;if(x<1ll*k*y)ans += 1ll*(len/k)*x + 1ll*(len%k)*y;else ans += 1ll*y*len;}else{if(x<1ll*k*y)ans += 1ll*(len/k)*x + 1ll*(len%k)*y;else ans += 1ll*y*len;}}if(a[r]!=b[i])j = r + 1;else j = r;}printf("%lld\n",ans);return 0;
}

D. Berserk And Fireball(模拟)相关推荐

  1. 使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课

    使用webgl(three.js)搭建一个3D建筑,3D消防模拟--第三课 项目背景 消防安全一直是各大都市关注的重要课题,在消防体系中,特别是高楼消防体系中,消防系统整体布控与监控,火情有效准确定位 ...

  2. SDUWH 新星赛线上模拟赛

    7-1 factorial 题目描述 In many applications very large integers numbers are required. Some of these appl ...

  3. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  4. curl模拟post请求

    另外可尝试 postman工具 或者用request 直接请求 CURL 发送POST请求curl -header "Content-Type: application/json" ...

  5. flask_模拟请求post,get

    #coding:utf-8 import requestsres = requests.post(url="http://192.168.135.105:8888/",data={ ...

  6. 模拟内存计算如何解决边缘人工智能推理的功耗挑战

    模拟内存计算如何解决边缘人工智能推理的功耗挑战 How analog in-memory computing can solve power challenges of edge AI inferen ...

  7. 为放大器模拟输入模块提供可靠的输入过电压保护

    为放大器模拟输入模块提供可靠的输入过电压保护 Signal Chain Basics #159: Provide robust input overvoltage protection for amp ...

  8. 模拟Servlet本质

    JavaWeb系列教程,持续更新 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造S ...

  9. 2021年大数据Flink(四十):​​​​​​​Flink模拟双十一实时大屏统计

    目录 Flink模拟双十一实时大屏统计 需求 数据 编码步骤: 1.env 2.source 3.transformation 4.使用上面聚合的结果,实现业务需求: 5.execute 参考代码 实 ...

  10. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

最新文章

  1. 为什么博图中放置按下按钮无反应_如何更好的设计按钮
  2. 马斯克的星辰大海,还在继续。“月球电梯,我来啦”
  3. js json对象转字符串_Mock.js模拟数据实现前端独立开发
  4. [javaSE] 多线程(join方法)
  5. java yii_构建 Java 应用程序
  6. js 操作 iframe
  7. 计算机密码学奖,上海交通大学计算机科学与工程系(CSE)
  8. 基于Tiles框架Struts框架的UI 设计—几种组织HTML和JSP视图组件
  9. linux 22端口被墙,Linode被墙SSH无法连接通过Lish连接方法
  10. Docker学习(四)Docker镜像原理 镜像commit操作补充
  11. 搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
  12. Siebel应用数据结构层次
  13. FLV方式实现网页FFmpeg推流无插件播放
  14. A better Tooltip with jQuery
  15. 云图说 | 勒索病毒防治解决方案
  16. C++校内模拟赛-06水题
  17. 【Spring Security】spring security 之初探jwt
  18. 5分钟成为车联网专家 | 全球首个C-V2X车联网城市级规模示范应用
  19. 如何让鼠标拖动时变成直线
  20. 免费多功能转码机器人(小程序转码机器人)

热门文章

  1. 【DevOps研发管理方案】一:方案简介
  2. 别踩白块游戏用html如何制作,纯用JavaScript 实现网页上《别踩白块儿》小游戏
  3. input file类型单个文件上传formData
  4. 国王游戏——c++实现
  5. 洛谷 P2168 [NOI2015] 荷马史诗
  6. 美团2021校招笔试-编程题题解
  7. 标签设计软件如何设计注册商标标识
  8. linux中安装openoffice
  9. 学计算机的怎么防辐射,电脑机箱如何防辐射----给大家科普一下
  10. vue项目没有router文件夹_router文件夹