Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) C. The Tower is Going Home(思维+双指针)
https://codeforces.com/contest/1075/problem/C
题意
一个宽为1e9*1e9的矩阵中的左下角,放置一个车(车可以移动到同一行或同一列),放置一些墙,竖的占据一列,横的有一的长度,问车从最下角走到第1e9行最少拆多少面墙?
思路
- 看了看数据范围以为是一道离散化的题,但是发现车可以往左走
- 然后再明确了一下题意,墙是永久拆去的,反应到可以优先拆竖着的墙,然后假如剩下横着的墙比竖着的墙少的话,可以直接拆横着的墙
- 写之前看了一下题意,说横着的墙不会有交点,然后大致确立了贪心策略:
将横着的墙按高度排序,然后一层一层向上爬,更新最右点,假如最右点>p[i].x2,然后就可以向上爬,假如最右点<=p[i].x2,看剩下横着的边多还是竖着的边多,决定是否要更新最右点
- 但是上述思路是错的,因为剩下的横边其实有的不一定要拆
题解
- 首先需要明确两个题意,这对解这道题非常重要
- 横着的边不会有交点,这一点非常重要,因为根据车的性质,假如横着的边有空隙,假设没有竖边,他就一定可以向上走,所以只需要判每条边的左端点是否1,1的边才需要记录,因为车上不去,这样所有的横边就变成了从1开始的边
- 墙是永久拆除的,这样竖着的边就等于一个上界,上界越大,意味着要拆的竖边越多,意味着能通过的横边越多
- 然后就可以枚举竖边(上界),然后找到横边大于上界的点,更新答案(这就是双指针)
#include<bits/stdc++.h>
#define pb push_back
#define M 1e9
using namespace std;
int n,m,i,ans,j,Y,x1,x2;
vector<int>y,x;
int main(){
cin>>n>>m;
for(i=0;i<n;i++){scanf("%d",&Y);y.pb(Y);}
y.pb(M);
for(i=0;i<m;i++){
scanf("%d%d%d",&x1,&x2,&Y);
if(x1==1)x.pb(x2);
}
sort(x.begin(),x.end());
sort(y.begin(),y.end());
ans=M;
for(i=0,j=0;i<=n;i++){
while(j<x.size()&&x[j]<y[i])j++;
ans=min(ans,(int)(i+x.size()-j));
}
cout<<ans;
}
Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) C. The Tower is Going Home(思维+双指针)的更多相关文章
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) B 1075B (思维)
B. Taxi drivers and Lyft time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2)---ABC
A---The King's Race http://codeforces.com/contest/1075/problem/A 题意: 一个人在\((1,1)\), 一个人在\((n,n)\), 现 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2)
A. The King's Race 签. #include <bits/stdc++.h> using namespace std; #define ll long long ll n, ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) A. The King's Race
http://codeforces.com/contest/1075/problem/A On a chessboard with a width of nn and a height of nn, ...
- Lyft Level 5 Challenge 2018 - Final Round Div. 1没翻车记
夜晚使人着迷.没有猝死非常感动. A:显然对于水平线段,只有横坐标的左端点为1的时候才可能对答案产生影响:对于竖直直线,如果要删一定是删去一段前缀.枚举竖直直线删到哪一条,记一下需要删几条水平线段就可 ...
- [Lyft Level 5 Challenge 2018 - Elimination Round][Codeforces 1033D. Divisors]
题目链接:1033D - Divisors 题目大意:给定\(n\)个数\(a_i\),每个数的约数个数为3到5个,求\(\prod_{i=1}^{n}a_i\)的约数个数.其中\(1 \leq n ...
- Lyft Level 5 Challenge 2018 - Elimination Round
A. King Escape 签. #include <bits/stdc++.h> using namespace std; ], y[]; int f1(int X, int Y) { ...
- Lyft Level 5 Challenge 2018 - Elimination Round翻车记
打猝死场感觉非常作死. A:判一下起点和终点是否在其两侧即可. #include<iostream> #include<cstdio> #include<cmath> ...
随机推荐
- stm32 开发中startup.s文件中常见的命令功能
由于C的普及以及编译器的发展,越来越多的软件工程师在编程时很少有机会接触到汇编语言.在ARM的开发中,我们不可避免的会遇到启动文件的编写,在KEIL环境中一般采用了startup.s的文件作为启动代码 ...
- angular小技巧随笔
1. 重新刷新页面 同页面切换状态: $state.go('tab.index', {inviteId:inviteId}); self.location.reload();
- Windows系统制作Ubuntu启动U盘(命令行)
背景 现今Ubuntu系统的使用越来越多,考虑到日常办公还是用Windows系统,但开发的需求常常要有Linux系统.因此将Linux系统安装到U盘不失为一种好的选择.在Windows系统上制作Ubu ...
- 32-改变eclipse默认的Tomcat部署路径
转载:https://www.cnblogs.com/helf/p/9433588.html eclipse中默认的项目部署路径是在项目的路径,不像myeclipse那样部署后项目在Tomcat的安装 ...
- mysqldump 导出数据库各参数详细说明
mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等. 下面我们详细介绍一下mysqldu ...
- Windows系统崩溃后快速恢复Oracle数据库的妙招
Windows系统崩溃后快速恢复Oracle数据库,以下是操作步骤 假设oracle数据安装在d:\\oracle文件夹中,数据库名称orcl 1>将崩溃的数据库安装目录"d:\\or ...
- ListView的自定义适配器及其优化(listView序号混乱问题的处理)
ListView是最常使用的android组件之一,关于listView的优化问题刚刚了解了一些,在这里做出总结. PS:如果想让ListView中的item根据数据内容显示item的大小,需要在it ...
- Maven 系列 一 :Maven 快速入门及简单使用
开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理. 2.下载及安装 下载最 ...
- Thread中join()方法进行介绍
http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details ...
- fastdfs 上传图片 完整版
1.jsp文件 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...