NOIP2012开车旅行 【倍增】】的更多相关文章

P1081 开车旅行    题面较为啰嗦.大概概括:一个数列,只能从一个点向后走,两种方案:A.走到和自己差的绝对值次小的点B.走到和自己差的绝对值最小点:花费为此差绝对值:若干询问从规定点向后最多花费$X$,且以移动方式A开始每走一次切换一次方式.求以A.B方式各花费多少. 不看题解切紫题一遍过了,兴奋~然而连想带写花了四小时左右,真要在noip考场上怕不是要凉...我太菜了QwQ 先看第一问,找比值最小点,实际上就是拆成$N$个询问,扔到第二问的询问里面做掉的说.所以主要看对于询问点怎么向后…
题目传送门 为什么NOIP的题目都这么长qwq 话说2012的D1T3和D2T3都是大火题啊qwq 预处理神题 对于这种跳跳跳的题目考虑使用倍增优化枚举.先预处理某个点之后距离最小和次小的城市,然后倍增预处理一大堆东西.设$f_i$表示从$A$开始开$2^i$次车到达的地点,$g_i$表示从$B$开始开$2^i$次车到达的地点,$k_{i,0/1}$表示从$A$开始开$2^i$次车$A$或$B$经过的路程,$l_{i,0/1}$表示从$B$开始开$2^i$次车$A$或$B$经过的路程.注意边界与…
题目:https://www.luogu.org/problemnew/show/P1081 预处理从每个点开始a能走多少.b能走多少.可以像dp一样从后往前推. 但有X的限制.所以该数组可以变成倍增的样子. 预处理第一步的找下一个点可以从后往前弄,在树状数组上二分.然后正常转移即可. 树状数组上的二分有细节: 找第一个 f 值为需要的值k的,可以if( query( mid )>=k )ans=mid,r=mid-1:也可以if( query(mid)<=k-1 )ans=mid,l=mid…
1264. [NOIP2012] 开车旅行 ★★☆   输入文件:drive.in   输出文件:drive.out   简单对比时间限制:2 s   内存限制:128 MB [题目描述] 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i, j] = |Hi − Hj|. 旅行过程中,小A…
题目描述 有\(n\)个城市,第\(i\)个城市的海拔为\(h_i\)且这\(n\)个城市的海拔互不相同.编号比较大的城市在东边.两个城市\(i,j\)之间的距离为\(|h_i-h_j|\) 小A和小B要开车去旅行.小A先开,他们会轮流开车.小A会把车开到第二近的城市,小B会把车开到最近的城市.如果当前城市到两个城市的距离相同,则认为海拔低的城市比较近.他们只会把车往东边开(即编号大的那边). 小A会先问你对于一个给定的\(x=x_0\),从哪一个城市出发,小A开车行驶的路程总数与小B行驶的路程…
题目 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j] = |Hi− Hj|. 旅行过程中,小 A 和小 B 轮流开车,第一天小 A 开车,之后每天轮换一次.他们计划选择一个城市 S 作为起点,一直向东行驶,并且最多行驶 X 公里就结束旅行.小 A 和小 B的驾驶风格不…
Luogu Description Sol 1.发现对于每个城市,小A和小B的选择是固定的,可以预处理出来,分别记为ga[],gb[] 2.并且,只要知道了出发城市和出发天数,那么当前城市和小A,小B各行驶的路程也是一定的,同样可以分别预处理出来 具体怎么预处理: 1.其实就是"邻值查找"    简单讲一下,就是把所有城市的高度都存进set排好序,然后ga[i]一定是在set里与h[i]相邻的中最近的的,gb[i]是与h[i]相邻的中次近的 2.倍增优化: 1) 设$p[i][j][k…
先用不管什么方法求出来从每个点出发,A走到哪.B走到哪(我写了一个很沙雕的STL) 然后把每个点拆成两个点,分别表示A从这里出发和B从这里出发,然后连边是要A连到B.B连到A.边长就是这次走的路径长度 为了方便,把不能继续走的点连到一个假节点1上(不连应该也无所谓) 然后我们预处理倍增,但要把A走的距离和B走的距离分开来算 之后就每次往上跳找第一个不能走的地方,然后算一算答案就行了 (整数除整数别忘了先换成double或者乘个1.0.............) #include<bits/std…
题目分析 朴素的做法就是预处理下一个目的地,然后跑模拟,超时. 本题最重要的考点是倍增优化.设$fa[i][j]$表示a从i出发行驶$2^j$“次”后行驶的路程,$fb[i][j]$表示从i出发行驶$2^j$“次”后行驶的路程,注意这里的"次",a.b交替行驶.$f[i][j]$表示从i出发a.b交替$2^j$“次”后行驶到的城市编号. 显然有$fa[i][j] = fa[i][j - 1] + fa[f[i][j - 1]][j - 1], fb = fb[i][j - 1] + f…
题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选次近的.旅行时有一个总路程x,如果两个人的总路程>x 或 有一个人无法按照自己的原则选择目的城市,旅行就终止. 有两个问: 1.给出x0,求从哪一个城市出发,使得A走的路程/B走的路程最小.如果B走的路程=0,则比值视为无穷大.如果有多个城市满足要求,则输出海拔最高的那个城市. 2.给出x和s(出发…