Archive

Posts Tagged ‘noip初赛’

NOIP2010提高组初赛问题求解第三题推广

October 27, 2010 Leave a comment

我们很自然地想求解下面的问题:

题目:记T为一队列,初始时为空,现有k个总和不超过n的正整数依次入列。如果无论这些数具体为何值,都能找到一种出队的方式,使得存在某个时刻队列T中的数之和恰好为m,那么k的最小值是___________。

显然当m<=0或n<=0或n<m时此题无解,否则:

类似地我们构建下面的图:

0—m—2m—…—m*[n/m]
1—m+1—2m+1—..—m*[n/m]+1
……
n%m—m+n%m—…—n

n%m+1—n%m+1+m—…—n-m+1

m-1—2m-1—…—n-n%m+1
第0行至第n%m行最多总共选([[n/m]/2]+1)(n%m+1)个
第n%m+1行至第m-1行最多总共选[([n/m]+1)/2](m-1-n%m)个
所以总共最多选([[n/m]/2]+1)(n%m+1)+[([n/m]+1)/2](m-1-n%m)个
注意到,我们计算的时候包含了S0,所以k的最小值就是([[n/m]/2]+1)(n%m+1)+[([n/m]+1)/2](m-1-n%m)

以原题n=32, m=9代入,得

k=([32/9]/2+1)*(32%9+1)+[(32/9]+1)/2]*(9-1-32%9)=2*6+2*3=18

Advertisements
Categories: OI Tags: , , , , ,

NOIP2010提高组初赛问题求解第三题解答

October 26, 2010 2 comments

题目:记T为一队列,初始时为空,现有n个总和不超过32的正整数依次入列。如果无论这些数具体为何值,都能找到一种出队的方式,使得存在某个时刻队列T中的数之和恰好为9,那么n的最小值是___________。

答案:18

证明:设这些数依次为a1, a2, a3, …, an,且记Si为前i项和,规定S0=0。很明显Si单调递增,且对任意i有0<=Si<=32。

我们可以以Si为顶点构造一张图,两点Si,Sj间连边当且仅当|Si-Sj|=9(图中数字为Si的编号,即i):

0–9–18–27
1–10–19–28
2–11–20–29
3–12–21–30
4–13–22–31
5–14–23–32
6–15–24
7–16–25
8–17–26

我们从这个图中选择一些顶点,将它们的编号排序作为一个可能的序列,比如选择0, 1, 10, 2, 13, 16,

排序后得0, 1, 2, 10, 13, 16,作差得ai依次为

1,1,8,3,3

显然有a2+a3=9 即满足条件

可以发现,若我们选择了图中的两个顶点,且它们之间连边,那么就存在一个和为9的子序列

那么,倘若对于某个n,我们能从图中选择n个顶点,使得任意两点间没有边,那么这个n就是不满足条件的

事实上,我们最多可以选择18个顶点,使得它们之间没有边相连:

第0行~第5行每行可以选第一、三个顶点或第二、四个顶点 最多共选10个

第6行~第8行每行可以选第一、三个顶点 最多选8个

注意到S0=0是必须选的,那么也就是说不满足条件的n的最大值是17

由鸽巢原理,若我们选择18个顶点,必有2个顶点之间有边连接,即必存在一个子序列的和为9

所以答案就是18。

Categories: OI Tags: , , ,