首页 > 其他分享 >P10224 [COCI 2023/2024 #3] Vrsar 题解

P10224 [COCI 2023/2024 #3] Vrsar 题解

时间:2024-05-12 20:42:31浏览次数:25  
标签:方案 数轴 int 题解 P10224 Vrsar 滑雪场 max define

P10224 [COCI 2023/2024 #3] Vrsar 题解


知识点

前缀和思想,贪心。


题意分析

我觉得题目挺清晰了……


思路

部分分

没必要,OK?

我不会告诉你我考场上打部分分打了 30 min,还只有 8 分。

正解

我们设一个方案 \(S\) 为 \(\{ x_1,x_2...x_n \}\),其中 \(x_i\) 表示第 \(i\) 个滑雪场的数轴坐标,\(T\) 为该方案的可能最大滑雪时间。

思考一下:如果我们不考虑下山的时间,那么对于一个方案 \(S\),我们去掉其中不为 \(x_n\) 的任意一个滑雪场,形成一个新的方案 \(S'\),该方案的可能最大滑雪时间 \(T'\) 必定等于 \(T\)。

而当我们考虑下山的时间,那么对于一个方案 \(S\),我们去掉其中不为 \(x_n\) 的任意一个滑雪场,形成一个新的方案 \(S'\),通过上面的推导,该方案的可能最大滑雪时间 \(T'\) 必定大于等于 \(T\),因为我们少去一个滑雪场,就少一次下山的时间,可以省出更多时间滑雪。

那我们就可以直接到某一个滑雪场即可。

现在算一下代价:设起点数轴坐标为 \(x\),终点滑雪场数轴坐标为 \(y\),关闭时间为 \(t\),那么最长时间为 \(\max{(0,t-|x-y|)}\),我们可以分类讨论再拆开(套路),用前缀和处理一下即可。


CODE

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)<(b)?(b):(a))
#define min(a,b) ((a)>(b)?(b):(a))
#define RCL(a,b,c,d) memset((a),(b),sizeof(c)*(d))
#define FOR(i,a,b) for(register int i=(a);i<=(b);++i)
#define DOR(i,a,b) for(register int i=(a);i>=(b);--i)
#define main Main();signed main(){ios::sync_with_stdio(0);cin.tie(0);return Main();}signed Main
using namespace std;
constexpr int N=1e5+10;
int n,m;
int b[N];
ll l[N],r[N];
struct node{
	ll x,t;
	friend bool operator <(node a,node b){
		return a.x<b.x;
	}
}a[N];
signed main(){
	cin>>n>>m;
	RCL(l,-0x3f,l,1),RCL(r,-0x3f,r,1);
	FOR(i,1,n){
		int x;
		cin>>a[i].x>>a[i].t>>x;
	}
	sort(a+1,a+n+1);
	FOR(i,1,n)b[i]=a[i].x;
	FOR(i,1,n)l[i]=max(l[i-1],a[i].t+a[i].x);
	DOR(i,n,1)r[i]=max(r[i+1],a[i].t-a[i].x);
	while(m--){
		int x;cin>>x;
		int tot=lower_bound(b+1,b+n+1,x)-b,ans=max(l[tot-1]-x,r[tot]+x);
		cout<<ans<<' ';
	}cout<<endl;
	return 0;
}

标签:方案,数轴,int,题解,P10224,Vrsar,滑雪场,max,define
From: https://www.cnblogs.com/Cat-litter/p/18188146

相关文章

  • P10225 [COCI 2023/2024 #3] Milano C.le 题解
    P10225[COCI2023/2024#3]MilanoC.le题解知识点栈,贪心,树状数组。题意分析求最小的栈的数量使得出入栈能够合法。思路分析我们为了方便,其实可以先按照到达车站的顺序(入栈顺序)给火车重新编号。编号后,就十分简单了。分析样例:53524132514编号后,就变成了:5......
  • P10232 [COCI 2023/2024 #4] Roboti 题解
    P10232[COCI2023/2024#4]Roboti题解知识点简单环,DFS。题意分析在\(n\)行,\(m\)列的网格里,给定\(k\)个转弯点,再给定\(Q\)个询问,问每次从某个坐标到另一个坐标的最少转弯次数,或者判断不可能到达。思路分析我们发现在一个点坐标与方向确定的时候,到达的下一个点的......
  • P10231 [COCI 2023/2024 #4] Putovanje 题解
    P10231[COCI2023/2024#4]Putovanje题解知识点多源BFS,bitset。题意分析在一个图上,每个点有一个权值,求满足到每个点的距离都为其权值的点(权值为\(-1\)的点除外)。思路分析Subtask1我们可以发现,这个子任务的图一定是一个有序的链,那么转换成序列问题,直接根据坐标进......
  • CF1967D Long Way to be Non-decreasing 题解
    CF1967DLongWaytobeNon-decreasing题解知识点二分答案,基环树。题意分析给定一个包含\(n\)个元素的数组\(\{a_i\}\)和一个\(m\)个元素的数组\(\{b_i\}\)。定义每次操作为:在\(\{a_i\}\)中选择任意个数,假设某个选的数为\(a_i\),那么将其变为\(b_{a_i}\)......
  • P10227 [COCI 2023/2024 #3] Slučajna Cesta 题解
    P10227[COCI2023/2024#3]SlučajnaCesta题解知识点期望DP,树形(换根)DP,组合数学。题意分析一棵树,每个点都有点权,每一条边的方向分布都是等概率的,问从每个点出发,有路走就一直走的情况下,所途径的点的权值总和的期望值。思路分析这明显是一个树形DP,且需要变成换根DP......
  • [ABC261E] Many Operations 题解
    [ABC261E]ManyOperations题解思路解析首先可以发现,如果直接跑肯定会炸,于是考虑优化。首先发现操作有很多重复的,所以可以考虑把每一个数经过所有操作后的值都预处理下来,但这样显然空间也会炸。然后我们又想到可以不需要求下每个数经过操作后的值,可以把每一位二进制上在开始前......
  • ABC353C Sigma Problem 题解
    ABC353CSigmaProblem题解题目链接:AT题目中的两个求和符号\(\sum_{i=1}^{N-1}\sum_{j=i+1}^{N}\)实际上是在枚举所有的有序数对\((i,j)\)。而有序数对的个数\(N(N-1)/2=O(N^{2})\),真的去枚举所有数对肯定会T。这时应该考虑去拆贡献,求出每个\(A_i\)对答案的贡献。......
  • 2024江苏省大学生程序设计大赛(JSCPC)热身赛题解(B)
    题目大意:求区间\([l,r]\)中有多少正整数满足\(\phi(\phi(n))=\phi(n)-1\),其中\(\phi\)为欧拉函数。解:设\(y=\phi(n)\),则上式变为\(\phi(y)=y-1\),易证\(y\)为质数(注意\(\phi(1)=1\),\(1\)与任何正整数都互质)。故原问题转化为求\([l,r]\)中有多少个正整数v满足\(\phi......
  • set 容器详解 附大根堆题解
    声明本文中题解部分内容大部分转载自@sonnety的这篇博客中,本文为为方便复习而写的结论类文章,读者可自行跳转至原文处阅读。PART1set什么是set——来源cppreference简言之,它就是一种存进去就可以自动按升序排列的特殊容器,通常的set还具有自动去重的功能。定义方......
  • 工作疑难问题解决4例
      记录一下工作上疑难问题解决:  一,方便的页面监控     前几天早上,负责的kettle抽取数据表的任务又报错了,早上看手机有4个未接报警电话,一看是人员表,原来昨天报表系统有个大的查询一直未查询完成,导致truncate这个人员表,无法活动meta的锁,后续执行抽取和计算的都报错......