Codeforces D. Berserk And Fireball(贪心)
链接:http://codeforces.com/contest/1380/problem/D
题目大意:
n个士兵站成一排,每个有一个能力值a[i](两两不同)。
现在有两种操作
1. 花费x的代价,击败连续的k个士兵。
2. 花费y的代价,选择两个相邻的,大的击败小的。
问留下所给的另外一个序列b的士兵,最小代价。
题目思路:
明显是根据b序列把各个a序列区间按照分开,然后把这些段儿删掉即可,如果思考dp的话,明显这是个和区间有关系,但是不太好转移。
先考虑-1的情况吧,第一种就是b和a序列中的各个元素的先后顺序不能发生变化。
第二种就是,当这一段长度不足k,而且段中的最大值,比这一段两边的还要大的时候,发现这个最大的怎么都删不掉。
这时思路就出来了,只要按照够不够k个,最大元素和两边元素的大小关系就可以判断了。
1。 当这一段不足k,且最大元素比两边的还要大,这个最大元素删不掉,输出-1.
2. 当这一段不足k,最大元素比两边某个小,那么可以选择一个一个删。
3. 当这一段大于k个,那么无论如何都可以删掉这一段,因为可以内部删,在判断k*y 和 x的关系,决定使用哪种删法贪心,前 提是要先把%k的余数那一部分处理掉,再解决这个剩下的k的倍数。
代码中再a,b序列的首位添加了-1便于操作,双指针的方法,idx1,idx2是指在a上滑动,定位待删除区间。idx3是在b上滑动,表示现在要在a中定位的两个值。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAXN = 2e5+5;
ll b[MAXN],a[MAXN];
int main()
{ll n,m;ll x,k,y;cin>>n>>m;cin>>x>>k>>y;a[0] = b[0] = -1;for(ll i=1;i<=n;i++){cin>>a[i];}for(ll i=1;i<=m;i++){cin>>b[i];}a[++n] = -1;b[++m] = -1;ll idx1 = 0;ll idx2 = 0;ll idx3 = 0;ll ans = 0;bool f = 1;while(idx3<m){while(idx1<=n){if(a[idx1]!=b[idx3]){idx1++;}else{break;}}if(idx1>n){f=0;break;}idx3++;while(idx2<=n){if(a[idx2]!=b[idx3]){idx2++;}else{break;}}// cout<<idx1<<" * "<<idx2<<" * "<<idx3<<endl;if(idx2>n){f = 0;break;}ll num = idx2-idx1-1;ll Max = 0;for(ll i=idx1+1;i<=idx2-1;i++){Max = max(Max,a[i]);}// cout<<Max<<" ** "<<endl;if(num<k){if(Max<a[idx1] || Max<a[idx2]){ans += num*y;// cout<<num*y<<" ****1 "<<endl;}else{f=0;break;}}else{ll md = num%k;ll cnt = num/k;num -= md;ans += md*y;// cout<<md*y<<" ***+ "<<endl;if(y*k<x){if(Max<a[idx1] || Max<a[idx2]){ans += y*num;}else{ans += x;ans += (num-k)*y;}// cout<<num*y<<" ****2 "<<endl;}else{ans += cnt*x;// cout<<cnt*x<<" ****3 "<<endl;}}//cout<<endl;}if(!f){cout<<-1<<endl;}else {cout<<ans<<endl;}
}
Codeforces D. Berserk And Fireball(贪心)相关推荐
- codeforces Gym 100338E Numbers (贪心,实现)
题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...
- Codeforces 671E Organizing a Race (贪心、线段树)
题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...
- CodeForces - 1529E Trees of Tranquillity(贪心+线段树)
题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...
- [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)
problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...
- codeforces 416C C. Booking System(贪心)
题目链接: codeforces 416C 题目大意: 给出n个请求,每个请求包括客人数量和支付金额,再给出m个桌子,包括桌子大小,问如何安排才能最大盈利.给出最大盈利和一个能够最大盈利的方案. 题目 ...
- Codeforces 540B School Marks 【贪心构造】
题目链接:Codeforces 540B School Marks Little Vova studies programming in an elite school. Vova and his c ...
- CodeForces 508E Arthur and Brackets 贪心
题目: E. Arthur and Brackets time limit per test 2 seconds memory limit per test 128 megabytes input s ...
- Codeforces 797C Minimal string【贪心】
题意: 给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作: 1.把s字符串第一个字符转移到t字符串最后. 2.把t字符串最后一个字符转移到u字符串最后. 最后要求s.t字符串都为空,问u ...
- codeforces 719C (复杂模拟-四舍五入-贪心)
题目链接:http://codeforces.com/problemset/problem/719/C 题目大意: 留坑... 转载于:https://www.cnblogs.com/A--Q/p/5 ...
- CodeForces - 803C Maximal GCD(贪心 + 枚举)
链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...
最新文章
- RDKit | 比较分子之间的相似性
- 利用jvisualvm分析JVM,进行性能调优
- 自动开料机器人_工业4.0智能家具无人化生产线 自动化无人化大势所趋
- GDCM:iU22原始数据提取器的测试程序
- .Net5 WPF快速入门系列教程
- 前端学习(973):移动端其他插件使用
- tomcat CATALINA_HOME与CATALINA_BASE的区别
- 马斯克又有新麻烦上身!前员工将他告到美国证监会,曝出一大堆惊天八卦
- [转载] python自带sqlite库_Python内置库SQlite3使用指南
- IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
- uniwebview按钮被无形遮挡问题
- 干货分享:【IT-PMP学堂】PMP 文档与配置管理
- 关于富文本编辑器的图片处理
- 《所谓情商高就是会说话》
- pandas使用速查表
- 带声调的拼音转拼音+数字
- mysql dba项目经验_MySQL数据库专家分享资深DBA经验
- 【元胞自动机】基于元胞自动机模拟双通道人群疏散含Matlab源码
- Android中Webview显示全屏拉伸图片
- Pycharm社区版下载与安装教程