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

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

最近学校 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\) 组,分别以数对的方式记录下来为:

\[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)\) 同理。

那么我们有:

\[\sum\limits_{i=1}^{50} min(t_i)\leq \frac{1}{2}\leq \sum\limits_{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}\) 之间。因为 \(\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}\) 这个条件的影响。这在信息奥赛中应该是有一定应用的,在构造题中是一个好方法。通过对某一个条件进行分析,用某种手段,比如分组,在弱化这一条件带来的影响。这个方法值得学习一下。

例题自己找

posted @ 2020-09-26 22:10  huayucaiji  阅读(262)  评论(1编辑  收藏  举报