口胡 P16454 [APIO 2026] Scallion Pancake Party 题解
好简单啊,看两眼就会了。不过由于暂无数据我只能口胡(也就是说我无法确保这是正确的做法),有了数据喊我来补代码。
首先如果
这里给出一个
1. 房间内的客人的策略
首先如果无法确定
具体来说,直接把第一张自己能吃且编号在
然后我们考虑让以后的所有人都知道
如果
先把编号为
记
考虑从
设第一片没吃的编号为
- 若
l_i=n-1 ,则传递信息在e_i-1 处结束,也即a_{i+1}=e_i ,消耗l_i=n-1=P_i 位传递信息; - 否则若
l_i \ge f_{e_i} ,则若l_i<P_i 会导致P_i>l_i \ge f_{e_i}=P_i 导出矛盾,故必有l_i=P_i ,传递信息在e_i 处结束,也即a_{i+1}=e_i+1 ,消耗l_i+1=P_i+1 位传递信息; - 否则
l_i<f_{e_i} :- 若
l_i=P_i 且f_{e_i}>P_i ,则: - 若
f_{e_i+1} \neq f_{e_i} ,则不吃f_{e_i+1} ; - 否则
f_{e_i+1}=f_{e_i}>P_i ,吃掉f_{e_i+1} 。 - 否则
l_i<P_i 且f_{e_i}=P_i ,则: - 若
f_{e_i+1} \neq f_{e_i} ,则f_{e_i+1} \neq f_{e_i}=P_i ,吃掉f_{e_i+1} ; - 否则
f_{e_i+1}=f_{e_i}=P_i ,不吃f_{e_i+1} 。 - 这部分的四种情况均可通过
f_{e_i+1} 与f_{e_i} 、f_{e_i+1} 是否被吃来区分开,则可以确定l_i 与f_{e_i} 中哪个是P_i ,传递信息在e_i+1 处结束,也即a_{i+1}=e_i+2 ,消耗l_i+2 \le \min(n,P_i+2) 位传递信息。
- 若
总共至多消耗
那么根据以上的传递信息方法,很容易得到以下从前往后依次还原
首先从
- 若
v_j=n-2 且f_{z_j} 被吃了,则P_j=n-1 且a_{j+1}=z_j+1 ; - 否则若
v_j \ge f_{z_j} ,则P_j=v_j 且a_{j+1}=z_j+1 ; - 否则
a_{j+1}=z_j+2 :- 若
f_{z_j} \neq f_{z_j+1} : - 若
f_{z_j+1} 没被吃,则P_j=v_j ; - 否则
P_j=f_{z_j} ; - 否则
f_{z_j}=f_{z_j+1} : - 若
f_{z_j+1} 没被吃,则P_j=f_{z_j} ; - 否则
P_j=v_j 。
- 若
2. 留在外面的客人的策略
根据 1. 中的还原方法还原