关于信息学奥赛构造在数学的一些思考记录

关于信息学奥赛构造在数学的一些思考记录

最近学校 C 班老师给了一道题,在这里聊聊。

问题描述

给你 (100) 个数 (a_1,a_2,a_3dots a_{99},a_{100})。这 (100) 个数满足:

  • (sumlimits_{i=1}^{100} a_i=1)
  • (|a_i-a_{i+1}|leq frac{1}{50} (iin [1,100)))

求证:对于任意满足条件的数列 (a),从中取 (50) 个数,至少有一组能满足选出的 (50) 个数的和与 (frac 1 2) 的差不超过 (frac 1 {100})

解法

我们考虑用类似贪心的微调法。首先我们可以把数字分为 (50) 组,分别以数对的方式记录下来为:

[T_1=(a_1,a_2) ]

[T_2=(a_3,a_4) ]

[T_3=(a_5,a_6) ]

[vdots ]

[T_i=(a_{i*2},a_{i*2+1}) ]

[vdots ]

[T_{50}=(a_{99},a_{100}) ]

接着,我们记 (max(T_i))(T_i) 这个二元组中最大的那个数。(min(T_i)) 同理。

那么我们有:

[sumlimits_{i=1}^{50} min(t_i)leq frac{1}{2}leq sumlimits_{i=1}^{50} max(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}) 之间。因为 (sumlimits_{i=1}^{50} min(t_i)leq frac{1}{2}leq sumlimits_{i=1}^{50} max(t_i)),所以我们在微调时一定有一次满足操作前,(sumleq frac{1}{2}),微调后 (sumgeq frac{1}{2})。而微调前后 (sum) 的差值 (leq frac{1}{50}),因此微调前后至少有一组 (50) 个数是满足条件的,得证。

启发

我们这道题的解题思路最重要的就是分组的思想,这样减小了两项之间差 (leq frac{1}{50}) 这个条件的影响。这在信息奥赛中应该是有一定应用的,在构造题中是一个好方法。通过对某一个条件进行分析,用某种手段,比如分组,在弱化这一条件带来的影响。这个方法值得学习一下。

例题自己找