Educational Codeforces Round 77 (Rated for Div. 2) D. A Game with Traps 贪心 +二分
传送门
文章目录
- 题意:
- 思路:
题意:
给你nnn个人,每个人都有个能力值aia_iai。让后在1−m1-m1−m的路上有kkk个陷阱,每个陷阱的范围是[li,ri][l_i,r_i][li,ri],伤害是did_idi,能力值低于did_idi的人不能通过陷阱,你可以跑到rir_iri处把这个陷阱摧毁,这样就可以带人过去了。现在起点在000,让带尽可能多的人到m+1m+1m+1点。
思路:
很明显的二分,我们先把aaa数组排序,让后二分带多少人,让后下界就是最小值mimimi,checkcheckcheck的时候需要将di>mid_i>midi>mi的陷阱都摧毁。
下面我们忽略di<mid_i<midi<mi的陷阱。
因为陷阱是一个线段,当两个陷阱有重叠的时候,肯定是尽可能往后走,走到这个连续区间段的最后,这样这个连续区间内不存在陷阱就可以走过去了,我们发现来回一趟再把人带过去是三次,我们只需要把这个长度乘333即可。
这个显然可以用差分来做,对于差分后的数组,我们只需要看看前缀和是否>0>0>0,如果>0>0>0那么ans+=3ans+=3ans+=3(因为我们要过去再回来带人再过去),否则ans+=1ans+=1ans+=1即可。我这里用的是暴力找rightrightright的方法,当时都写一半了也懒得改了,差分这种统计方法比较简单也很巧妙。
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<assert.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m,k,t;
int a[N];
vector<PII>v[N],vv[N],tp[N];bool check(int mid)
{int mi=a[n-mid+1];LL cs=0,pos=0;while(pos!=m+1){int mx=-1; pos++;for(int i=0;i<v[pos].size();i++) if(mi<v[pos][i].Y) mx=max(mx,v[pos][i].X);if(mx==-1) cs++;else{int right=mx;for(int i=pos;i<=right;i++){for(int j=0;j<v[i].size();j++)if(v[i][j].Y>mi) right=max(right,v[i][j].X);}pos--;cs+=3*(right-pos);pos=right;}if(cs>t) return false;}if(cs<=t) return true;else return false;
}int main()
{// ios::sync_with_stdio(false);
// cin.tie(0);cin>>n>>m>>k>>t;for(int i=1;i<=n;i++) scanf("%d",&a[i]); a[n+1]=INF;sort(a+1,a+1+n);for(int i=1;i<=k;i++){int a,b,c; scanf("%d%d%d",&a,&b,&c);v[a].pb({b,c});}int l=0,r=n,ans=0;while(l<=r){int mid=l+r>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}printf("%d\n",ans);return 0;
}
/**/
Educational Codeforces Round 77 (Rated for Div. 2) D. A Game with Traps 贪心 +二分相关推荐
- Educational Codeforces Round 77 (Rated for Div. 2)A~C[数学场]
A. Heating 题目大意:就是给你一个数n把它分成k份始得每一份的平方和最小: 思路:1.如果k足够大那么将n分成n个1平方和为n是最小的 2.如果k < n,我们还是从第一点出发,先将n ...
- Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence 数论
传送门 文章目录 题意: 思路: 题意: 思路: 碰到这样的题肯定是先写几个找找规律了,随便写几个就可以发现是以lcm(a,b)lcm(a,b)lcm(a,b)为一个循环,所以我们只需要在一个周期lc ...
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】
传送门:http://codeforces.com/contest/1082/problem/B B. Vova and Trophies time limit per test 2 seconds ...
- Educational Codeforces Round 96 (Rated for Div. 2)C. Numbers on Whiteboard(贪心算法(水题))
题目链接: 传送门 题目贴上: 题意:,给你 1-n个数,你可以对两个不同位置的数进行合并,比如a和b,合成数变成(a+b)/2,结果四舍五入.放在数组末尾,删除原来的a和b,举例子吧 就这样子两两合 ...
- 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, ...
最新文章
- 图像处理 100 问!!
- python中的栈结构_python中有栈吗
- 【模板】第二类斯特林数Stirling
- android自定义金额输入键盘_Android 自定义输入支付密码的软键盘实例代码
- 怎么上传文件到kk服务器,VS Code 关于SFTP上传文件到多服务器的配置
- python弹球小游戏程序_Python实现弹球小游戏
- Kubernetes学习之路(26)之kubeasz+ansible部署集群
- 正负样本不平衡处理方法总结【转】
- 手机摄像头的组成结构和工作原理
- matlab跑微分方程画图,偏微分方程工具箱PDE
- 介绍大家一个很好玩的网站。多人在线flash联机游戏。
- python能解决什么数据问题_浅谈Python数据分析
- 怎么找回删除的文件?尝试下这些恢复数据的方法
- 使用 Neo4j 图数据库可视化(网络安全)知识图谱
- 计算机系统(一)期末复(yu)习(1):数据表示以及数字逻辑(电路)
- C++学习笔记和面试备考(二, 转)
- 彩云小译怎么翻译网页_彩云小译插件,中英双语对照网页翻译,支持视频字幕翻译...
- Fri Feb 22 20:22:00 CST 2019字符串型转date
- 用java获取一维数组的平均值_java中一维数组常见运算
- 【无重复字符的最长子串--三种方法】
热门文章
- 清华姚班毕业生不配自信?张昆玮在豆瓣征女友,却被网友群嘲......
- 面试算法工程师时,我居然被化学专业转行的老哥血虐了
- 3 年工作经验程序员应有的技能
- 提升代码可读性的 10 个技巧
- 点击ride界面edit空白_『技术锦囊』如何在SOLIDWORKS界面调用宏程序?
- java实现数字转mac,Java Ethernet.getSourceMAC方法代码示例
- linux访问nfs端口号,linux nfs配置及访问控制
- sm缩写代表什么意思_pe、PE在电气有代表什么意思,你发现没有,电气技术很有意思...
- 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
- northstar机器人编程_《机器人构建实战》——导读