首页 > 其他分享 >勇攀山丘小队(翻越篇)2——题解

勇攀山丘小队(翻越篇)2——题解

时间:2024-09-26 21:53:31浏览次数:1  
标签:ch int 题解 nullptr cin 勇攀 翻越 include

前言

胸有丘壑,气吞山河。

正片

A 题

思路其实很简单,当你以当前位置在 \(i\),油量为 \(p\) 的地方开到了位置为 \(j\),且 \(p_{j+1}-i>p\) 时,你肯定走不了了。因此你应当在 \(i\) 到 \(j\) 找到能加油最多的加油站来进行加油。

需要动态维护这个最大值的数据结构我们可以利用堆来实现。

那过程就非常简单了,只用走不了时就加一次油即可。

AC code

#include<iostream>
#include<algorithm>
#include<queue>
#define int long long
using namespace std;
typedef pair<int,int> PII;
const int N=2e6+100;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}
inline void write(int x){
	if(x<0){putchar('-');x=-x;}
	if(x>9) write(x/10);
	putchar(x%10+48);
}
inline void wt(int x,char ch){
	write(x);
	putchar(ch);
}
int n,l,p;
int ans;
struct Node{
	int d,w;
	bool operator<(const Node &w) const{
		return d<w.d;
	}
}a[N];
bool cmp(Node a,Node b){return a.w<b.w;}
priority_queue<Node> q;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i].w>>a[i].d;
	cin>>l>>p;
	for(int i=1;i<=n;i++) a[i].w=l-a[i].w;
	sort(a+1,a+n+1,cmp);
	int i=1;
	while(p<l){
		while(a[i].w<=p&&i<=n) q.push(a[i++]);
		if(q.size()) p+=q.top().d,ans++,q.pop();
		else{cout<<"-1";return 0;}
	}
	cout<<ans<<'\n';
	return 0;
}

标签:ch,int,题解,nullptr,cin,勇攀,翻越,include
From: https://www.cnblogs.com/Merge-Change230/p/18434491

相关文章

  • 题解 QOJ837 / ZROI1287【Giant Penguin】
    PetrozavodskWinter2020.Day3.300iqContest3.ProblemG.GiantPenguinGiantPenguin-Problem-QOJ.ac题目描述有一个\(n\)个点\(m\)条边的连通无向无权图,满足每个节点在至多\(k\)个简单环上(没有重复顶点的环是简单环)。\(q\)次操作支持:1.标记一个点;2.询问......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【哈希表】2024E-选修
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出说明解题思路代码pythonjavacpp时空复......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【DFS/BFS】2024E-开
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出解题思路代码解法一:BFSpythonjavacpp......
  • LGP1313 题解
    原题链接:P1313[NOIP2011提高组]计算系数。难度:Easy。考察二项式定理的基本应用。正解发现存在式子\((ax+by)^k\),容易想到二项式定理。二项式定理:\[(x+y)^n=\sum\limits_{i=0}^{n}{n\choosei}x^iy^{n-i}\]令\(p=ax,q=by\),那么原式变为\((p+q)^k\)。那么此时......
  • LGB3717 题解
    原题链接:B3717组合数问题。难度:Easy组合数学的模板题。排除做法:\(n,m\le5\times10^6\),显然不能使用杨辉三角递推。模数为\(998,244,353\),无法使用\(\text{Lucas}\)定理。正解考虑直接使用组合数的计算式:\[{n\choosem}=\dfrac{n!}{m!(n-m)!}\]其中\(n!\)可......
  • P8908 [USACO22DEC] Palindromes P 题解
    P8908[USACO22DEC]PalindromesP题解算是好题,虽然没什么人做(简单地,我们考虑如何将一个字符串改变为回文串。显然如果我们判定所有\(\texttt{G}\)组成的是回文串,那么整个串一定是回文的。于是我们只考虑改变\(\texttt{G}\)的位置。那么由这类题的套路不难知道最优的变换......
  • 【洛谷】P1168 中位数 的题解
    【洛谷】P1168中位数的题解题目传送门题解不懂就问,这是什么标签啊,《线段树》《二分》《堆》《树状数组》qaq谔谔,教练讲的这是一题线段树,看半天看不出来,也不会做,只好去看题解。其他的题解讲什么主席树,平衡树,分块,结果看完第一篇人都傻了。什么东西嘛qaq(恼vector直接一......
  • CF1063E Lasers and Mirrors题解
    一道很好的手玩题,被薄纱了。首先判掉\(\foralli,p_i=i\)的情况(显然是\(n\))然后考虑按照\(p_i\)连边,先构造每一个环的方案。发现可以简单放置两面镜子使得\(i\)射到\(p_i\),而且只要从高到底构造,一定不会产生影响。但是每一个环的最后一个点很特殊,因为第1个点下面放置了让第1个......
  • LOJ 6241. 性能优化 I 题解
    题给代码意为\[\begin{align*}&\sum\limits_{i=1}^n\sum\limits_{j=1}^{\lfloor\fracni\rfloor}\sum\limits_{k=1}^j[\gcd(j,k)=1]\\=&\sum\limits_{i=1}^n\sum\limits_{j=1}^{\lfloor\fracni\rfloor}\varphi(j)\\......
  • P8475 「GLR-R3」雨水 题解
    关于这道题目卡\(O(n\logn)\)但是放\(O(n^2)\)我也是很疑惑。我们发现,题目要求的是字典序最小的序列。但凡涉及了字典序最小,答案或多或少的都会带点贪心思想。那我们也来贪一贪。考虑当前枚举到第\(i\)个点,如果后面有比它更小的数,那显然把它们交换过来是更优的。如果有多......