P16226 [蓝桥杯 2026 省 A] 拦截程序 题解
P16226 [蓝桥杯 2026 省 A] 拦截程序Link: https://www.luogu.com.cn/problem/P16226题目描述联邦安全局截获了一起正在进行的黑客攻击一个携带核心机密的数据包正沿着一条线性的光纤隧道被秘密传输。这条光纤隧道的总长度为L LL可将其视为一条从坐标0 00左端到坐标L LL右端的线段。情报显示该数据包在光纤内的移动速度为恒定值V VV且已经传输了整整T TT秒即目前在光纤内推进了V × T V \times TV×T的距离。黑客的入侵源头尚不明确因此数据包当前的位置存在两种可能情况 A左端入侵数据包位于坐标P A V × T P_A V \times TPAV×T处。情况 B右端入侵数据包位于坐标P B L − V × T P_B L - V \times TPBL−V×T处。你需要在光纤上选择一个整数坐标P PP0 ≤ P ≤ L 0 \le P \le L0≤P≤L部署拦截程序。为了使拦截方案尽可能稳妥你需要衡量每一个坐标P PP的偏差——即P PP到P A P_APA的距离与P PP到P B P_BPB的距离中的较大者。现在请寻找一个最优的整数坐标P PP使得这个偏差值最小并输出该最小值。输入格式第一行包含一个整数C CC表示测试用例的数量。接下来的C CC行每行包含三个整数L , V , T L, V, TL,V,T分别表示光纤隧道的总长度、数据包的移动速度以及已经传输的时间。输出格式对于每个测试用例输出一行一个整数表示最小偏差值。输入输出样例 #1输入 #13 100 2 10 51 5 2 200 10 10输出 #130 16 0说明/提示【样例说明】对于第一组数据L 100 , V 2 , T 10 L 100, V 2, T 10L100,V2,T10数据包推进了20 2020。它可能在情况 A坐标20 2020处也可能在情况 B坐标80 8080处。选择整数坐标P 50 P 50P50无论在哪边距离都是30 3030。对于第二组数据L 51 , V 5 , T 2 L 51, V 5, T 2L51,V5,T2数据包推进了10 1010。它可能在情况 A坐标10 1010处也可能在情况 B坐标41 4141处。最佳的整数坐标可以选择P 25 P 25P25到 A 的距离是15 1515到 B 的距离是16 1616较大值为16 1616。或者选择P 26 P 26P26到 A 的距离是16 1616到 B 的距离是15 1515较大值同样是16 1616。因此最小的最坏情况距离为16 1616。对于第三组数据L 200 , V 10 , T 10 L 200, V 10, T 10L200,V10,T10数据包推进了100 100100。无论从哪边开始它现在都刚好在中心坐标100 100100处。直接将程序部署在P 100 P 100P100处最大距离为0 00。【评测用例规模与约定】对于30 % 30\%30%的评测用例1 ≤ C ≤ 100 1 \le C \le 1001≤C≤1001 ≤ L , V , T ≤ 1000 1 \le L, V, T \le 10001≤L,V,T≤1000。对于所有评测用例1 ≤ C ≤ 10 5 1 \le C \le 10^51≤C≤1051 ≤ L , V , T ≤ 10 12 1 \le L, V, T \le 10^{12}1≤L,V,T≤1012且保证V × T ≤ L V \times T \le LV×T≤L。特别地本题测试数据额外满足V × T L / 2 V\times TL/2V×TL/2但是未在原题面写明。Solution1. 题意已知坐标轴上的两个点的坐标P A V T P_A VTPAVTP B L − V T P_B L-VTPBL−VT求一个点P PP使得min ( ∣ P − P A ∣ , ∣ P − P B ∣ ) \min(|P-P_A|,|P-P_B|)min(∣P−PA∣,∣P−PB∣)最小。2. 分析在数轴上到两个定点距离的最大值最小化的点一定是这两个点的中点。中点坐标为M P A P B 2 V T ( L − V T ) 2 L 2 M \frac{P_A P_B}{2} \frac{VT (L - VT)}{2} \frac{L}{2}M2PAPB2VT(L−VT)2L最小偏差值就是∣ P A − P B ∣ 2 ∣ L − 2 V T ∣ 2 \dfrac{|P_A - P_B|}{2} \dfrac{|L-2VT|}{2}2∣PA−PB∣2∣L−2VT∣。由于题目要求P PP必须是整数而上述结果不为整数时只可能是带着一个.5 .5.5因此直接将上面的结果向上取整就是要输出的答案也就是⌈ ∣ L − 2 V T ∣ 2 ⌉ \boxed{\left \lceil \dfrac{|L-2VT|}{2} \right \rceil}⌈2∣L−2VT∣⌉。3. 代码usingSystem;usingSystem.Collections.Generic;classP16226{staticvoidMain(){Solve();}staticvoidSolve(){varinputDataConsole.In.ReadToEnd().Split(new[]{ ,\n,\r},StringSplitOptions.RemoveEmptyEntries);if(inputData.Length0)return;variterator0;if(!long.TryParse(inputData[iterator],outlongC))return;varresultsnewListstring();for(inti0;iC;i){longLConvert.ToInt64(inputData[iterator]);longVConvert.ToInt64(inputData[iterator]);longTConvert.ToInt64(inputData[iterator]);longDV*T;longans(Math.Abs(L-2*D)1)/2;results.Add(ans.ToString());}Console.WriteLine(string.Join(\n,results));}}