阮蓄 发表于 2025-6-4 08:54:56

P1081 [NOIP2012 提高组] 开车旅行

思路:

首先令 \(nxt1_i\) 表示右侧最近的城市距离(\(id1_i\) 为编号),令 \(nxt2_i\) 表示右侧第二近的城市编号(\(id2_i\) 为编号);可以使用 set 找出离这个城市最近的 \(4\) 个城市(前面两个,后面两个)。
定义:

[*]\(f_{i,j}\) 表示从 \(i\) 点出发走 \(2^j\) 轮最后到达的位置。
[*]\(dp1_{i,j}\) 表示从 \(i\) 点出发走 \(2^j\) 轮最后 A 走过的距离。
[*]\(dp2_{i,j}\) 表示从 \(i\) 点出发走 \(2^j\) 轮最后 B 走过的距离。
初始化:

\

\

\
状态转移方程为:

\

\

\
此时对于询问 \(1\) 和询问 \(2\):

[*]本质上是求出从每个城市出发后 \(A\) 走的距离与 \(B\) 走的距离。
[*]那么考虑从高位到低位贪心,即设当前跳到了 \(s\) 点,若 \(dp1_{s,i} + dp2_{s,i} \le x\),可以从 \(s\) 跳到 \(f_{s,i}\),需要令 \(x \gets x - (dp1_{s,i} + dp2_{s,i})\),然后继续遍历 \(i-1\) 位。
[*]因为是 A 先开车,所以 A 可能会在最后一轮结束后还能再开上一次,需要特判。
时间复杂度为 \(O((N+Q) \log N)\)。
完整代码:

#include#define Add(x,y) (x+y>=mod)?(x+y-mod):(x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;bool Begin;const ll N=1e5+10,M=18,INF=1e18;inline ll read(){    ll x=0,f=1;    char c=getchar();    while(c'9'){      if(c=='-')          f=-1;      c=getchar();    }    while(c>='0'&&c

汤流婉 发表于 2025-10-31 03:57:06

这个好,看起来很实用

蟠鲤 发表于 2025-12-30 09:23:55

感谢分享,下载保存了,貌似很强大

谲脾 发表于 2026-1-11 06:28:53

东西不错很实用谢谢分享

万俟谷雪 发表于 2026-1-16 20:43:05

感谢分享,下载保存了,貌似很强大

孙淼淼 发表于 2026-1-18 12:29:07

懂技术并乐意极积无私分享的人越来越少。珍惜

班嘉淑 发表于 2026-1-19 11:18:30

谢谢分享,辛苦了

电棘缣 发表于 2026-1-19 23:17:20

yyds。多谢分享

迭婵椟 发表于 2026-1-24 10:51:32

感谢分享,学习下。

甦忻愉 发表于 2026-1-27 06:28:50

懂技术并乐意极积无私分享的人越来越少。珍惜

史穹逊 发表于 2026-1-29 03:17:22

很好很强大我过来先占个楼 待编辑

骆贵 发表于 2026-2-2 09:33:34

用心讨论,共获提升!

愤血冒 发表于 2026-2-4 06:37:32

鼓励转贴优秀软件安全工具和文档!

坡琨 发表于 2026-2-4 11:19:59

过来提前占个楼

祝娜娜 发表于 2026-2-5 04:46:55

感谢,下载保存了

勺缓曜 发表于 2026-2-6 05:35:14

谢谢分享,辛苦了

蒙飘 发表于 2026-2-7 21:37:01

很好很强大我过来先占个楼 待编辑

孟清妍 发表于 2026-2-8 08:10:25

谢谢分享,试用一下

许娴广 发表于 2026-2-8 13:16:37

不错,里面软件多更新就更好了

抽厉 发表于 2026-2-10 19:58:31

不错,里面软件多更新就更好了
页: [1] 2
查看完整版本: P1081 [NOIP2012 提高组] 开车旅行