关于信息学奥赛构造在数学的一些思考记录
关于信息学奥赛构造在数学的一些思考记录
最近学校 C 班老师给了一道题,在这里聊聊。
问题描述
给你 \(100\) 个数 \(a_1,a_2,a_3\dots a_{99},a_{100}\)。这 \(100\) 个数满足:
- \(\sum\limits_{i=1}^{100} a_i=1\)
- \(|a_i-a_{i+1}|\leq \frac{1}{50} (i\in [1,100))\)
求证:对于任意满足条件的数列 \(a\),从中取 \(50\) 个数,至少有一组能满足选出的 \(50\) 个数的和与 \(\frac 1 2\) 的差不超过 \(\frac 1 {100}\)。
解法
我们考虑用类似贪心的微调法。首先我们可以把数字分为 \(50\) 组,分别以数对的方式记录下来为:
接着,我们记 \(max(T_i)\) 为 \(T_i\) 这个二元组中最大的那个数。\(min(T_i)\) 同理。
那么我们有:
假设我们现在选择的 \(50\) 个数是 \(min(T_1),min(T_2)\dots min(T_{100})\),记目前 \(50\) 个数的和为 \(sum\),只要 \(|sum-\frac 12|>\frac{1}{100}\),我们就把其中一个 \(min(T_i)\) 换成 \(max(T_i)\)。这样每次 \(sum\) 的变化量就在 \(0\) 到 \(+\frac{1}{50}\) 之间。因为 \(\sum\limits_{i=1}^{50} min(t_i)\leq \frac{1}{2}\leq \sum\limits_{i=1}^{50} max(t_i)\),所以我们在微调时一定有一次满足操作前,\(sum\leq \frac{1}{2}\),微调后 \(sum\geq \frac{1}{2}\)。而微调前后 \(sum\) 的差值 \(\leq \frac{1}{50}\),因此微调前后至少有一组 \(50\) 个数是满足条件的,得证。
启发
我们这道题的解题思路最重要的就是分组的思想,这样减小了两项之间差 \(\leq \frac{1}{50}\) 这个条件的影响。这在信息奥赛中应该是有一定应用的,在构造题中是一个好方法。通过对某一个条件进行分析,用某种手段,比如分组,在弱化这一条件带来的影响。这个方法值得学习一下。
例题自己找