原题:在一个有限的实数数列中,任意 7 个连续项之和为负数,且任意 11 个连续项之和为正数。求这个数列最多有多少项。

解法一:记这个数列为 a1, a2, ..., ak,问题等价于求 k 的最大值,记为 g。假设 g ≥ 7 + 11 - 1 = 17,考察如下的一组序列:

a1 a2  ...  a11

a2 a3  ...  a12

...

a7 a8  ...  a17

这组序列排成一个 7×11 矩阵 A。由题设知,A 的每一行各数之和为正数,所以 A 中各数之和为正数;而 A 的每一列各数之和为负数,所以A 中各数之和为负数,矛盾。这说明 g ≤ 16。

另一方面,可以构造 16 项数列 5, 5, -13, 5, 5, 5, -13, 5, 5, -13, 5, 5, 5, -13, 5, 5 满足题设要求。所以 g = 16,即这个数列最多有 16 项。

说明1:从国内的资料看到解法一便是当年英国参赛选手 John Rickard 给出的解法。他因为这个巧妙解法还获得了特别奖。这里补充一下具体构造满足题设要求的 16 项数列的一个简便方法:

令该数列以前 7 项为一个循环段,则其 16 项可记为 a1, a2, ..., a7, a1, a2, ..., a7, a1, a2,这样可以确保其中任意 7 个连续项之和都相等。

再令该 16 项数列中,任意 7 个连续项之和为 -1,且任意 11 个连续项之和为 1。于是有

a1 + a2 + ... + a7 = -1

a1 + a2 + a3 + a4 = 1 - (-1) = 2

a2 + a3 + a4 + a5 = 2

a3 + a4 + a5 + a6 = 2

a4 + a5 + a6 + a7 = 2

a5 + a6 + a7 + a1 = 2

a6 + a7 + a1 + a2 = 2

进一步有 a5 = a1, a6 = a2, a7 = a3, a1 = a4, a6 = a4,可解出:

a1 = a2 = a4 = 5,a3 = -13,于是便得到一个满足题设要求的 16 项数列:

5, 5, -13, 5, 5, 5, -13, 5, 5, -13, 5, 5, 5, -13, 5, 5

在 https://math.stackexchange.com/questions/3008035/smallest-size-of-set-of-real-numbers-such-that-the-sum-of-any-seven-is-strictly/ 上看到一个网名为 Dr. Mathva 的人贴出了上述的解法一,以及如下所示的一个通用解法:

解法二

in the book "The IMO compendium" the authors offer the following solution generalizing the problem

We shall prove a stronger statement: If 7 and 11 in the question are replaced by any positive integers m, n, then the maximum number of terms is m+ n − (m, n) − 1.

Let a1, a2, ..., al be a sequence of real numbers, and let us define s0 = 0 and sk = a1 + ... + ak (k = 1, ..., l). The given conditions are equivalent to sk > sk+m for 0 ≤ k ≤ l − m and sk < sk+n for 0 ≤ k ≤ l − n.

Let d = (m, n) and m = m'd, n = n'd. Suppose that there exists a sequence (ak) of length greater than or equal to l = m+ n − d satisfying the required conditions. Then the m' + n' numbers s0, sd, . . . , s(m'+n'−1)d satisfy n' inequalities sk+m < sk and m' inequalities sk < sk+n. Moreover, each term skd appears twice in these inequalities: once on the left-hand and once on the right-hand side. It follows that there exists a ring of inequalities si1 < si2 < ... < sik < si1 , giving a contradiction.

On the other hand, suppose that such a ring of inequalities can be made also for l = m + n − d − 1, say si1 < si2 < ... < sik < si1. If there are p inequalities of the form ak+m < ak and q inequalities of the form ak+n > ak in the ring, then qn = rm, which implies m' | q, n' | p and thus k = p + q ≥ m' + n'. But since all i1, i2, ... , ik are congruent modulo d, we have k ≤ m' + n' − 1, a contradiction. Hence there exists a sequence of length m + n − d − 1 with the required property.

而按照 Dr. Mathva 的说法,这个解法二才是 John Rickard 的解法——This second solution was offered in the IMO by John Rickard, from the UK, who received a special price for such an original approach.

具体看一下这个通用解法。用正整数 m 和 n 替换原题中的 7 和 11,若 m = n,按通用解法给出的通用最大项数为 g = m + n - (m,n) - 1 = m - 1【为清晰起见,这里用字母 g 取代通用解法里使用的 l】,即总项数为 m - 1,这时任意 m - 1个实数构成的数列都认为是满足题设要求的,但实际情形是根本不存在题设所言的实数数列满足任意连续 m 项之和同时为正数和负数,在这样的前提下谈论这个数列最大项数是没有意义的。

其它的情形,不妨令 m < n,若 m | n,按通用解法给出的通用最大项数为 g = m + n - (m,n) - 1 = n - 1,这时任意 n - 1个负实数构成的数列都认为是满足题设要求的,但实际情形是根本不存在题设所言的实数数列满足任意连续 m 项之和为负数且任意连续 n 项之和为正数,在这样的前提下谈论这个数列最大项数也是没有意义的。

以下就 m < n 且 m ≠ (m,n) 的情形对上述通用解法进行分析。

第二段引入 sk = a1 + a2 + ... + ak, (1 ≤ k ≤ g) 和 s0 = 0,并由题设得到

sk > sk+m, (0 ≤ k ≤ g - m)

sk < sk+n, (0 ≤ k ≤ g - n)

都是很好懂的。但第三段的内容则显得比较晦涩。以下取 m = 6 且 n = 10 为例具体看一下这一段:

Let d = (m, n) and m = m'd, n = n'd.

即 d = (m, n) = (6, 10) = 2,m' = 3,n' = 5;此时 m' + n' - 1 = 7

Suppose that there exists a sequence (ak) of length greater than or equal to g = m+ n − d satisfying the required conditions. Then the m' + n' numbers s0, sd, . . . , s(m'+n'−1)d satisfy n' inequalities sk+m < sk and m' inequalities sk < sk+n.

这一句是说,假设数列 a1, a2, ..., ah,h ≥ g = m + n - d = 14,满足题设要求,那么 s0, s2, s4, . . . , s14 这 8 个数会满足以下两组不等式(左侧一组 5 个,右侧一组 3 个,共 8 个不等式):

s6 < s0             s0 < s10

s8 < s2             s2 < s12

s10 < s4           s4 < s14

s12 < s6

s14 < s8

Moreover, each term skd appears twice in these inequalities: once on the left-hand and once on the right-hand side. It follows that there exists a ring of inequalities si1 < si2 < · · · < sik < si1 , giving a contradiction.

这两句是说,s0, s2, s4, . . . , s14 这 8 个数中的每个数都在 8 个 x < y 型的不等式中的左端和右端各出现一次,于是可推出这 8 个数中一定存在 si1 < si2 < · · · < sik < si1 这样的环路关系,导致一个数小于它自身的矛盾。这是因为,按假设的条件,每个数都不是最大的(也不是最小的)。

至此,第三段的逻辑已经很清楚了。接着看第四段:

On the other hand, suppose that such a ring of inequalities can be made also for g = m + n − d − 1, say si1 < si2 < · · · < sik < si1. If there are p inequalities of the form ak+m < ak and q inequalities of the form ak+n > ak in the ring, then qn = rm, which implies m' | q, n' | p and thus k = p + q ≥ m' + n'.

这几句(如标红部分所示,这里有几处笔误,a 应该是 s,r 应该是 p)是说,假设 g = m + n - d - 1 的情形也会出现 si1 < si2 < · · · < sik < si1 这样的环路关系,这个环路中有 k 个 x < y 型不等式。若这 k 个不等式中,p 个来自 sk+m < sk,q 个来自 sk < sk+n,则有 qn = pm,由此有 m' | q 和 n' | p,因此 k = p + q ≥ m' + n'。

解释一下 qn = pm 的由来:环路中有 k 个 x < y 型不等式,从 i1 开始,做了 p 次减 m 操作和 q 次加 n 操作后又回到了 i1,即有 i1 - pm + qn = i1,于是有 qn = pm。随后的结论很直观了。

But since all i1, i2, . . . , ik are congruent modulo d, we have k ≤ m' + n' − 1, a contradiction. Hence there exists a sequence of length m + n − d − 1 with the required property.

这两句是说,由 i1 ≡ i2 ≡ ... ≡ ik (mod d),就有 k ≤ m' + n' − 1,这与 k ≥ m' + n' 构成冲突。因而,满足题设要求的长度为 m + n − d − 1 的数列是存在的。

i1, i2, . . . , ik 模 d 同余是显然的,因为从 i1 到 ik 的逐次变换都是减 m 或加 n,而 d = (m,n)。又因为 i1, i2, . . . , ik 取值都是 [0, m + n - d -1] 范围内的整数,两两不同且模 d 同余,而在 0, 1, ..., m + n - d -1 这 m + n - d 个整数中 模 d 同余的数最多为 (m + n - d) / d = m' + n' − 1 个,即有 k ≤ m' + n' − 1。与 k ≥ m' + n' 矛盾,这说明当 g = m + n − d − 1 时,s0, s1, ..., sg 中不存在  x < y 型环。于是就认定存在数列 a0, a1, ..., ag 满足题设要求。这是通用解法中最为奇特的部分了,即免除了构造一个具体的满足题设要求的数列的环节。

这里不做由 s0, s1, ..., sg 中不存在 x < y 型环,到存在数列 a0, a1, ..., ag 满足题设要求的严格证明。仅以 m = 6 和 n = 10 为例,来实际构造一个满足题设要求的数列 a0, a1, ..., ag 实例:

这时,g = m + n - d - 1 = 13,出自 sk+m < sk 的全体不等式(共计有 m + n - d - 1 - m + 1 = n - d = 8 个)为:

s6 < s0,s7 < s1,s8 < s2,s9 < s3,s10 < s4,s11 < s5,s12 < s6,s13 < s7

出自 sk < sk+n 的全体不等式(共计有 m + n - d - 1 - n + 1 = m - d = 4 个)为:

s0 < s10,s1 < s11,s2 < s12,s3 < s13

据此试图排出 s0, s1, ..., s13 从小到大的顺序,得到:

s8 < s2 < s12 < s6 < s0 < s10 < s4

s9 < s3 < s13 < s7 < s1 < s11 < s5

s0 = 0,不妨令 s6 = -1,s10 = 1,s12 = -2,s4 = 2,s2 = -3,s8 = -4

同样,不妨令 s1 = 0,s7 = -1,s11 = 1,s13 = -2,s5 = 2,s3 = -3,s9 = -4

由 ai = si - si-1,可得

(a1, a2, ..., a13) = (0, -3, 0, 5, 0, -3, 0, -3, 0, 5, 0, -3, 0)

这便是 m = 6, n = 10 时,满足题设要求的最大项数为 13 的一个数列实例。

由上面的分析过程可知,原题扩展到一般情形后还可以进一步限定是整数数列,其结论依然成立。

说明2:上面的解法一和解法二存在一定的关联性。回顾解法一里那个 7×11 矩阵

a1 a2  ...  a11

a2 a3  ...  a12

...

a7 a8  ...  a17

对矩阵的第 i 行求和,得到:

si+10 - si-1 > 0, i = 1,2,...,7

对矩阵的第 j 列求和,得到:

sj+6 - sj-1 < 0, j = 1,2,...,11

矩阵的各行求和相加,记为 sr,得到:

sr = (s11 + s12 + ... +s17) - (s0 + s1 + ... + s6) > 0

矩阵的各列求和相加,记为 sc,得到:

sc = (s7 + s12 + ... +s17) - (s0 + s1 + ... + s11) < 0

由 (s0 + s1 + ... + s6) + (s7 + s12 + ... +s17) = (s0 + s1 + ... + s11) + (s11 + s12 + ... +s17)

可知,sr = sc,这样就连通到了解法一的思路。但是解法一里的矩阵表示法确实是非常直观的,这种直观性明显优于解法二。

我们甚至可以说,对于证明一般情形下的必要性结论,即 g ≤ m + n - (m, n) - 1,解法一在直观性上也是优于解法二的。以上面分析解法二引入的 m = 6, n = 10 的特殊情形来具体看一下用解法一的思路如何求解:

拓展题:在一个有限的整数数列中,任意 6 个连续项之和为负数,且任意 10 个连续项之和为正数。求这个数列最多有多少项。

分析:若直接套用前述的解法一,给出如下的矩阵:

a1 a2  ...  a10

a2 a3  ...  a11

...

a6 a7  ...  a15

只能得到 g ≤ 6 + 10 - 1 - 1 = 14,若接着试图去构造一个满足题设要求的 a1, a2, ..., a14 数列实例就会碰壁了。事实上,前述的解法一之所以对原题起作用是因为 (m, n) = (7, 11) = 1。因此拓展题需要对前述的解法一加以改进,即要把 (m, n) 考虑进去。

由于d = (m, n) = (6, 10) = 2,把数列 a1, a2, ..., a2k 的项从左至右两个一组结对求和,可得到一个新数列 b1, b2, ..., bk,其中 bi = a2i-1 + a2i, i=1,2,...,k

若数列 a1, a2, ..., a2k 中任意连续 m = 6 项之和为负数,且任意连续 n = 10 项之和为正数,则在数列 b1, b2, ..., bk 满足:任意连续 m/d = 3 项之和为负数,且任意连续 n/d = 5 项之和为正数。考察如下的 3×5 矩阵 B

b1 b2  ...  b5

b2 b3  ...  b6

b3 b4  ...  b7

对每行求和,可得 B 中各数之和为正数;而对每列求和,可得 B 中各数之和为负数,矛盾。因此为使得数列 a1, a2, ..., a2k 满足题设要求,k 必须小于等于 m/d + n/d - 1 = 7,于是有 g ≤ d(m/d + n/d - 1) - 1 = m + n - d - 1 = 13。再用前面 说明1 里的方法很容易实际构造出满足题设要求的项数为 13 的数列实例:

(a1, a2, ..., a13) = (0, -3, 0, 5, 0, -3, 0, -3, 0, 5, 0, -3, 0)

因此 g = 13。

说明3:对于一般情形的结论,即正整数 m 和 n 满足 m < n 且 m ≠ (m, n) 时,满足任意 m 项之和为负数,且任意 n 项之和为正数的整数队列 a1, a2, ..., ak 的最大项数为 g = m + n - (m, n) - 1。由上面的改进的解法一可以很直观地推导出 g ≤ m + n - (m, n) - 1 这个必要性的结论,但是进一步通过构造可行数列来证明 g = m + n - (m, n) - 1 就非常困难了。对比之下,解法二的做法是极其巧妙和高明的,它不是通过构造可行实例来证明结论,而是证明项数为 g = m + n - (m, n) - 1 的可行实例一定存在。

当给定 m 和 n 具体的取值时,如前面分析所示,用解法一和解法二都可以很容易地构造出具体的满足题设要求的数列实例。但就一般情形而言,构造一个项数为 g = m + n - (m, n) - 1 的满足题设要求的通用数列实例应该是非常困难的(甚至是不可能的)。

附言

为搞清楚当年 John Rickard 提供的解答到底是解法一还是解法二,在网上又进一步查了一些资料。

在 https://artofproblemsolving.com/community/c6h61033p369641 上看到 enescu 贴出的当年捷克选手 Martin Čadek 的一个解法:

Let  be the given sequence and let .
The conditions from the hypothesis can be now written as  and  for all .
We then have:

a contradiction. Therefore, the sequence cannot have  terms.
In order to show that  is the answer, just take 16 real numbers satisfying
.
We have  and  for . Thus we found all sequences with the given properties.

不难看出,这是前述解法二针对 m = 7, n = 11 的表述,应对原题是没有问题的,Martin Čadek 也确实因为这个解法得到了特别奖(详见 https://www.imo-official.org/team_r.aspx?code=CZS&year=1977)

另外,pbornsztein 指出:

More generally, it can be shown that :
If  are any two distinct positive integers such that none of them divides the other, and if a sequence has the property that the sum of any  consecutive terms is always positive and the sum of any  consecutive terms is negative then the maximal length of this sequence is  where 

The proof I know is quite long, so that I will not write it here. It can be found in :
Quadrature, n°54 (Oct. Dec. 2004), ex. E-218, p.34-36.

enescu 的回应如下:

Well, this was proved during the competition by GB7, John Rickard, a gold medalist in 1977!

综合查到的资料看,John Rickard 当年的解答应该就是前述的解法二,即通用解法。而解法一,依我看,很可能是出题组提供的官方解法。

IMO 1977 第 2 题探析的更多相关文章

  1. 中文分词工具探析(二):Jieba

    1. 前言 Jieba是由fxsjy大神开源的一款中文分词工具,一款属于工业界的分词工具--模型易用简单.代码清晰可读,推荐有志学习NLP或Python的读一下源码.与采用分词模型Bigram + H ...

  2. 中文分词工具探析(一):ICTCLAS (NLPIR)

    1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...

  3. 深入探析koa之中间件流程控制篇

    koa被认为是第二代web后端开发框架,相比于前代express而言,其最大的特色无疑就是解决了回调金字塔的问题,让异步的写法更加的简洁.在使用koa的过程中,其实一直比较好奇koa内部的实现机理.最 ...

  4. Emmet 语法探析

    Emmet 语法探析 Emmet(Zen Coding)是一个能大幅度提高前端开发效率的一个工具. 大多数编辑器都支持Snippet,即存储和重用一些代码块.但是前提是:你必须先定义 这些代码块. E ...

  5. 开源中文分词工具探析(三):Ansj

    Ansj是由孙健(ansjsun)开源的一个中文分词器,为ICTLAS的Java版本,也采用了Bigram + HMM分词模型(可参考我之前写的文章):在Bigram分词的基础上,识别未登录词,以提高 ...

  6. 开源中文分词工具探析(四):THULAC

    THULAC是一款相当不错的中文分词工具,准确率高.分词速度蛮快的:并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等. 1. 前言 THU ...

  7. 开源中文分词工具探析(五):FNLP

    FNLP是由Fudan NLP实验室的邱锡鹏老师开源的一套Java写就的中文NLP工具包,提供诸如分词.词性标注.文本分类.依存句法分析等功能. [开源中文分词工具探析]系列: 中文分词工具探析(一) ...

  8. Erlang调度器细节探析

    Erlang调度器细节探析 Erlang的很多基础特性使得它成为一个软实时的平台.其中包括垃圾回收机制,详细内容可以参见我的上一篇文章Erlang Garbage Collection Details ...

  9. 开源中文分词工具探析(五):Stanford CoreNLP

    CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...

随机推荐

  1. git 强推本地分支覆盖远程分支

    git 强推本地分支覆盖远程分支git push origin 分支名 --force

  2. 微信小程序组件学习 -- 注册页面

    微信小程序组件使用手册地址: 1. 百度搜索"微信公众平台",扫码登录之后,点击帮助文档里面的普通小程序. 2. 接着选择"开发"-->"组件& ...

  3. protobuf基础类以及python 转换pb2.py文件

    一 protobuf-前端解析js 前端解析思路: 1.问后端要数据模型文件,比如名为MODEL.proto 2.使用谷歌官方的工具生成MODEL.js 3.把项目中引用的MODEL.js 和谷歌官方 ...

  4. Spring Messaging 远程命令执行漏洞(CVE-2018-1270)

    影响版本 Spring Framework 5.0 to 5.0.4 Spring Framework 4.3 to 4.3.14 参考 https://www.it610.com/article/1 ...

  5. Hadoop 3.1.1 - Yarn 服务 - 快速开始

    快速开始 本文描述了如何用 Yarn 服务框架在 Yarn 上部署服务. 配置和启动 HDFS 和 Yarn 组件 首先启动 HDFS 和 Yarn 的各个组件.为启用 Yarn 服务框架,添加以下参 ...

  6. Centos8 Nginx 开机自启配

    第一步:创建 service文件 vim /lib/systemd/system/nginx.service /lib 与 /usr/lib 我这里配置时是一样的,在那个文件夹配置都可以 第二步:编写 ...

  7. git从远程仓库里拉取一条本地不存在的分支

    查看远程分支和本地分支 git branch -va 当我想从远程仓库里拉取一条本地不存在的分支时: git checkout -b 本地分支名 origin/远程分支名 例如: 切换远程分支 git ...

  8. Wireshark基础

    Wireshark基础 wireshark简介: wireshark是一款用于追踪网络流量的辅助工具,帮助捕获.分析网络封包,并进行分析. 主要功能:     1.网络分析任务         查看网 ...

  9. DHCP\PXE+kickstart网络装机平台

    DHCP概述及原理: ​ DHCP地址分配的四次会话 ​ DISCOVERY -****OFFER -REQUEST -ACK 服务端基本概念: 租期:允许客户机组用IP地址的时间期限,单位为秒 作用 ...

  10. HCIA—(网络初相识)

    网络 IT--> 信息服务 -->数据底层 云计算 大数据 CT--> 通信服务 -->通信服务 构建数据通信的协议 ICT-->信息通信 数据 + 通信 数通 基础 R ...