标题: 几道编程题
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:43 资料 主页 文集 短消息 只看该作者
几道编程题

写在前面

本帖只讨论数学、数据结构与算法,不讨论软件工程。题目并非本人原创,而是从其他途径收集而来。

每题后附件压缩包内是测试用例,包含一个输入文件和一个输出文件,各位可以用来测试自己的程序。值得注意的是:
1.所有输入都满足限制条件,不必另行测试。
2.大部分程序都在10秒内运行完成,如果程序运行时间超过1分钟,请改进程序。
3.解题步骤:只根据题目条件和示例输入输出完成程序,然后下载测试用例,检验程序输出与标准输出是否一致。

01 链式开关

共有N个开关串连起来,初始时所有的开关都是断开状态。第一个开关前连接电源,最后一个开关之后连上一个灯泡。

每按一次按钮能够让所有通电的开关翻转一次。

例如,按一次按钮,第一个开关连通,电流可流向第二个开关。
再按一次按钮,第一个开关断开,第二个开关接通。
按第三次按钮,第一个开关接通,第二个开关保持不变,电流可流向第三个开关。

求按下K次按钮之后,第N个开关后的灯泡是否点亮。

输入格式:
第一行为测试样本数量 T ,以下 T 行每行有 N 和 K 两个整数。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为ON或者OFF

限制条件:
1 ≤ T ≤ 10,000
1 ≤ N ≤ 30
0 ≤ K ≤ 10^8

示例输入:
4
1 0
1 1
4 0
4 47

示例输出:
Case #1: OFF
Case #2: ON
Case #3: OFF
Case #4: ON

[ 本帖最后由 周瑜 于 2010-10-22 16:09 编辑 ]


附件: 01 链式开关.rar (2010-5-29 02:35, 52.88 K)
该附件被下载次数 127


顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:44 资料 主页 文集 短消息 只看该作者
02 太空观测

自古以来,人们就认识到太空事件都严格遵循着固定的周期,可以通过过去的发生时间,推断出同一事件下次可能的发生时间。然后,由于资料缺失,流传下来的往往只有过去零散的观测结果,并不能确定唯一的周期。

为了精确记录时间,这里引进一个极小的时间单位,称之为 A 。根据历史记载,某事件曾在 26000A,11000A,6000A 以前发生,虽然不能求出其周期,却可以判断该事件在 4000A 以后必然再次发生。

本题的要求就是根据太空事件过去的 N 次发生时间,求出下一次必然发生的时间点 y (y>=0),单位为 A 。注意,由于宇宙漫长的历史,普通的32位或者64位整数已不能满足需要。

输入格式:
第一行为测试样本数量 C ,以下 C 行每行为一个样本,每行以 N 开头,以后是 N 个以空格分隔的整数 ti ,表示过去的某次事件到现在的时间。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为如上所述。

限制条件:
1 ≤ C ≤ 100
2 ≤ N ≤ 1000
1 ≤ ti ≤ 10^50
∑(ti-tj)^2 ≠ 0

示例输入:
3
3 26000000 11000000 6000000
3 1 10 11
2 800000000000000000001 900000000000000000001

示例输出:   
Case #1: 4000000
Case #2: 0
Case #3: 99999999999999999999

[ 本帖最后由 周瑜 于 2010-5-30 15:16 编辑 ]


附件: 02 太空观测.rar (2010-5-30 03:35, 36.82 K)
该附件被下载次数 114


顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:45 资料 主页 文集 短消息 只看该作者
03 主题公园

主题公园的疯狂过山车非常火爆,游客从早到晚排队游玩,直到公园关门。过山车每天运行 R 趟,每趟最大载客 k 人,游客共分 N 组,每组 gi 人(0≤i<N)。早晨开门时,g0 组首先登车,然后依次是 g1,g2...。每一整组必须同时登车,下车的游客按照原来的排队顺序继续排在队尾等待下一次登车。如果过山车没有足够空间装载下一组则出发,即使没有装满,后一组也不能越过前一组提前上车。

求过山车一天总的搭载人次。

举例:
R = 4,k = 6,分组为1,4,2,1
第一车:1,4
第二车:2,1,1
第三车:4,2
第四车:1,1,4
总搭载人次:21

输入格式:
第一行为测试样本数量 T ,每个样本包含两行,第一行为以空格分隔的R,k,N,第二行有 N 个整数,表示每组人数,g0,g1,g2,等等。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为总搭载人次。

限制条件:
1 ≤ T ≤ 50
1 ≤ R ≤ 10^8
1 ≤ k ≤ 10^9
1 ≤ N ≤ 1000
1 ≤ gi ≤ 10^7
gi ≤ k

示例输入:
3
4 6 4
1 4 2 1
100 10 1
1
5 5 10
2 4 2 3 4 2 1 2 1 3

示例输出:
Case #1: 21
Case #2: 100
Case #3: 20

[ 本帖最后由 周瑜 于 2010-6-17 12:18 编辑 ]


附件: 03 主题公园.rar (2010-5-29 02:46, 49.51 K)
该附件被下载次数 143
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:45 资料 主页 文集 短消息 只看该作者
04 翻转积木

一个截面为 N×N 的木盒内放着若干红色和蓝色的积木,每个积木都是 1×1 的正方形,并且与木盒底面和侧面的距离都为整数。现在向右翻转木盒90度,积木会受重力作用坠落而重新排列。

下图中, R 表示红色积木, B 表示蓝色积木, . 表示空格:
初始状态   翻转后    坠落后
.......  .......  .......
.......  R......  .......
.......  BB.....  .......
...R...  BRRR...  R......
...RB..  RBB....  BB.....
..BRB..  .......  BRR....
.RBBR..  .......  RBBR...


已知翻转前所有积木都是静止状态,完全翻转后积木才开始坠落。求坠落后是否存在横、竖、或斜的连续 K 个相同颜色的积木,输出仅红色、仅蓝色、都有、都没有四种判断之一。

输入格式:
第一行为测试样本数量 T ,每个样本包含 N+1 行,第一行为 N 和 K 两个整数,以下每行有 N 个字符,表示积木的初始位置,格式和含义均与上图相同。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为 Red、Blue、Both 或者 Neither

限制条件:
1 ≤ T ≤ 100
3 ≤ K ≤ N
3 ≤ N ≤ 50

示例输入:
4
7 3
.......
.......
.......
...R...
...BB..
..BRB..
.RRBR..
6 4
......
......
.R...R
.R..BB
.R.RBR
RB.BBB
4 4
R...
BR..
BR..
BR..
3 3
B..
RB.
RB.


示例输出:
Case #1: Neither
Case #2: Both
Case #3: Red
Case #4: Blue

[ 本帖最后由 周瑜 于 2010-5-30 21:51 编辑 ]


附件: 04 翻转积木.rar (2010-5-31 05:55, 10.96 K)
该附件被下载次数 131
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:45 资料 主页 文集 短消息 只看该作者
05 光滑数组

如果一个数组所有相邻两个元素之差的绝对值都不超过 M ,那么该数组就是一个光滑数组。

为了使数组变得光滑,有以下三种操作:
1. 删除任意元素,开销为 D
2. 在任意位置插入任意元素,开销为 I
3. 修改任意元素,开销为新值与原值之差的绝对值。

给定一个由有 N 个元素组成的一维数组,每个元素都在 0~255 范围之内,求通过以上三种操作,使其变为光滑数组的最小开销。

注意:空数组和只有一个元素的数组,都是光滑数组。

输入格式:
第一行为测试样本数量 T ,每个样本包含两行,第一行为D,I,M,N,第二行有 N 个整数 ai,表示数组中元素的值。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为使数组光滑的最小开销。

限制条件:
1 ≤ T ≤ 100
0 ≤ D, I, M, ai ≤ 255
1 ≤ N ≤ 100

示例输入:
2
6 6 2 3
1 7 5
100 1 5 3
1 52 6

示例输出:
Case #1: 4
Case #2: 18

示例解释:
第一个例子中,把 7 修改为 3 ,开销为 4 。
第二个例子中,删除的开销非常大,而插入的开销非常小,因此可先把 52 改为 51 ,在 1 和 51 之间插入 9 个数, 51 和 6 之间插入 8 个数,总开销为 18 。

[ 本帖最后由 周瑜 于 2010-6-6 07:17 编辑 ]


附件: 05 光滑数组.rar (2010-6-2 04:21, 9.44 K)
该附件被下载次数 97
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:46 资料 主页 文集 短消息 只看该作者
06 取豆游戏

甲乙面前有两堆豆子,每人轮流取,每次只能从多的那堆取少的那堆豆子数量的正整数倍,把其中一堆取完的输掉游戏。

例如两堆豆子分别为 12 和 51,
甲先取,从 51 中拿掉 12 的 3 倍 36 个,剩余数量为 12 和 15,
乙再取,从 15 中拿掉 12 个,剩余 12 和 3,
甲再取,从 12 中拿掉 3 的 3 倍 9 个,剩余 3 和 3,
轮到乙,必然把其中一堆 3 取完,乙认输。

假设甲乙两人都足够聪明,因此只要确定了两堆豆子的初始数量 (A,B) ,就能判定游戏结果。如果先取的甲必胜,那么称 (A,B) 为先手必胜。

给定 A1,A2,B1,B2,当 A1 ≤ A ≤ A2 并且 B1 ≤ B ≤ B2 时,求有多少对 (A,B) 构成先手必胜。

输入格式:
第一行为测试样本数量 T ,以下 T 行每行为一个样本,包含以空格分隔的四个整数 A1,A2,B1,B2。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为先手必胜 (A,B) 对的个数。

限制条件:
1 ≤ T ≤ 100
1 ≤ A1 ≤ A2 ≤ 1,000,000
1 ≤ B1 ≤ B2 ≤ 1,000,000

示例输入:
3
5 5 8 8
11 11 2 2
1 6 1 6

示例输出:
Case #1: 0
Case #2: 1
Case #3: 20

[ 本帖最后由 周瑜 于 2010-6-3 14:16 编辑 ]


附件: 06 取豆游戏.rar (2010-6-4 01:41, 1.96 K)
该附件被下载次数 114
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:46 资料 主页 文集 短消息 只看该作者
07 创建目录

在Unix操作系统,文件都存储在目录中。通常用路径来表示嵌套的深层目录,路径名以 / 开头,各层目录名也用 / 分隔,但最后不再有 / 符号。

如果一个路径存在,则这个路径中的所有目录全部存在。如果需要创建一个路径,则底层和各级的父目录,凡是不存在的都需要创建。

例如,/home/xycq/forum 就是一个路径名,根目录下第一层为 home ,第二层为 xycq ,第三层为 forum 。如果除根目录外无任何目录,则需要使用 mkdir 命令三次才能创建这个完整路径。

已知存在 N 个路径,需要创建 M 个路径,求需要使用命令 mkdir 的次数。

输入格式:
第一行为测试样本数量 T ,每个样本第一行为 N 和 M 两个整数,以下 N 行表示已经存在的路径,接下来 M 行表示需要创建的路径。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为需要使用 mkdir 的次数。

限制条件:
1 ≤ T ≤ 100
0 ≤ N ≤ 100
1 ≤ M ≤ 100
所有路径不多于 100 个字符。

示例输入:
3
0 2
/home/gcj/finals
/home/gcj/quals
2 1
/chicken
/chicken/egg
/chicken
1 3
/a
/a/b
/a/c
/b/b

示例输出:
Case #1: 4
Case #2: 0
Case #3: 4

[ 本帖最后由 周瑜 于 2010-6-4 18:56 编辑 ]


附件: 07 创建目录.rar (2010-6-5 02:21, 26.97 K)
该附件被下载次数 109
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:46 资料 主页 文集 短消息 只看该作者
08 抓起小鸡

一些小鸡在笔直的窄道上同向行走,每只小鸡保持恒定的速度。当后面的小鸡追上前面的小鸡时,后面的小鸡会暂时把速度降为与前面小鸡的速度相等。此时如果抓起前面的小鸡并放下,两只小鸡将交换位置,并恢复各自本来的速度继续前进。抓起放下小鸡的动作瞬时完成,即使有多只小鸡在同一地点,每次抓起也只能让后面的一只小鸡超过。

给定小鸡数量 N ,初始坐标 Xi , 初始速度 Vi ,目的地坐标 B ,求至少需要多少次抓起动作,才能保证至少有 K 只小鸡在时间 T 之内到达目的地。

输入格式:
第一行为测试样本数量 C ,每个样本包含三行,第一行为N,K,B,T,第二行有 N 个不同整数 Xi ,按照升序排列,表示小鸡的初始坐标,第三行有 N 个整数 Vi ,表示小鸡初始速度。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为最少需要交换的次数,或者 IMPOSSIBLE

限制条件:
1 ≤ C ≤ 100
1 ≤ B ≤ 1,000,000,000
1 ≤ T ≤ 1,000
0 ≤ Xi < B
1 ≤ Vi ≤ 100
1 ≤ N ≤ 50
0 ≤ K ≤ N

示例输入:
3
5 3 10 5
0 2 5 6 7
1 1 1 1 4
5 3 10 5
0 2 3 5 7
2 1 1 1 4
5 3 10 5
0 2 3 4 7
2 1 1 1 4

示例输出:
Case #1: 0
Case #2: 2
Case #3: IMPOSSIBLE

[ 本帖最后由 周瑜 于 2010-6-7 10:29 编辑 ]


附件: 08 抓起小鸡.rar (2010-6-7 22:29, 13.77 K)
该附件被下载次数 102
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:47 资料 主页 文集 短消息 只看该作者
09 绝对序号

127是个很有意思的数。首先,它是一个质数。在质数集合中,127是第31个质数,31又是第11个质数,11是第5个,5是第3个,3是第2个,2是第1个,1不是质数。

如上所示,序号的定义是集合中不大于该数的元素个数。如果某数在集合中的序号仍然在这个集合中,序号的序号也在这个集合中,序号的序号的序号……全都在这个集合中,最终通过有限次求序号操作后得到1,而1不在这个集合中。那么,就称该数在此集合中拥有绝对序号。

已知 n ,求 n 在集合 {2, 3, 4, ..., n} 的多少个子集中拥有绝对序号。由于计算结果很大,只需要回答子集个数除以 100003 的余数。

输入格式:
第一行为测试样本数量 T ,以下 T 行每行包含一个整数 n 。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 如上所述。

限制条件:
1 ≤ T ≤ 100
2 ≤ n ≤ 500

示例输入:
2
5
6

示例输出:
Case #1: 5
Case #2: 8

示例解释:
第一个例子中,5在{2, 3, 4, 5}{2, 3, 5}{3, 4, 5}{2, 5}{5} 这5个集合中拥有绝对序号。
第二个例子中,6在{2, 3, 4, 5, 6}{2, 3, 4, 6}{2, 4, 5, 6}{2, 3, 6}{3, 4, 6}{3, 5, 6}{2, 6}{6} 这8个集合中拥有绝对序号。

[ 本帖最后由 周瑜 于 2010-6-7 10:37 编辑 ]


附件: 09 绝对序号.rar (2010-6-7 22:37, 797 bytes)
该附件被下载次数 108
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:48 资料 主页 文集 短消息 只看该作者
10 有线网络

某公司在两栋相邻的办公楼都有不少办公室,这两栋楼称为左楼和右楼。铺设内部有线局域网时,使用了一些网线把位于左楼和右楼的办公室连接起来。

从侧面看去,网线如蜘蛛网般纵横交错。任何办公室最多只和对面楼的一间办公室有网线相连,没有三条或更多的网线在空中交于一点。

已知网线数量 N ,各条网线连接的楼层号 Ai,Bi,求从侧面看去网线在空中的交点数。

输入格式:
第一行为测试样本数量 T ,每个样本包含 N+1 行,第一行为网线数量 N ,以下 N 行每行有2个整数 Ai,Bi,分别表示该网线所连接的左右楼楼层号。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为侧面看去网线的交点数。

限制条件:
1 ≤ T ≤ 15
1 ≤ Ai ≤ 10^4
1 ≤ Bi ≤ 10^4
1 ≤ N ≤ 1000

示例输入:
2
3
1 10
5 5
7 7
2
1 1
2 2

示例输出:
Case #1: 2
Case #2: 0

[ 本帖最后由 周瑜 于 2010-6-7 10:42 编辑 ]


附件: 10 有线网络.rar (2010-6-7 22:42, 49.51 K)
该附件被下载次数 123
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:49 资料 主页 文集 短消息 只看该作者
11 负载测试

某网站的负载出错检测是突变的,同时在线人数不超过某个值 X 时可以正常工作,一旦达到 X+1,网站就会出错。

已知该网站可以支持 L 人但不能支持 P 人(L<P)同时在线。现在希望通过负载测试,缩小上下限区间到 C 倍以内。即存在某个正整数 a,网站可以支持 a 人但不支持 a*C 人。

求最坏情况最少需要多少次负载检测。

注:每次负载检测只会有通过和出错两种情况,不会有其他结果。

输入格式:
第一行为测试样本数量 T ,以下 T 行每行为一个样本,包含以空格分隔的三个整数 L,P,C。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为最坏情况下需要测试的次数。

限制条件:
1 ≤ T ≤ 1000
2 ≤ C ≤ 10
1 ≤ L < P ≤ 10^9
L,P,C 均为整数

示例输入:
4
50 700 2
19 57 3
1 1000 2
24 97 2

示例输出:
Case #1: 2
Case #2: 0
Case #3: 4
Case #4: 2

[ 本帖最后由 周瑜 于 2010-6-7 11:03 编辑 ]


附件: 11 负载测试.rar (2010-6-7 23:03, 9.4 K)
该附件被下载次数 106
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:50 资料 主页 文集 短消息 只看该作者
12 制作棋盘

有一块 M 行 N 列的大石板,每个小方格都是黑白二色之一,现在需要把这块石板制作成若干棋盘。棋盘的定义是一个 X*X 的正方形,其任意两块相邻的小方格颜色都不同。

制作棋盘的方法是先从石板上剪下最大可能的棋盘,然后再剪下次大的棋盘,直到剪下 1*1 的微型棋盘。如果有相同大小的棋盘,先裁剪上方的,如果高度还相等,则先裁剪左方的。

求每种大小的棋盘各能制作多少个。

输入格式:
第一行为测试样本数量 T ,每个样本包含 M+1 行,第一行为 M 和 N 两个整数,以下 M 行每行表示石板的一行的颜色,第一行为最上方一行,最后一行为最下方一行。每行有 N/4 个字符,其中 N 一定被4整除。
为了减小输入文件大小,用每个字符表示相邻4个小方格的颜色。把输入文件的 0-9 和 A-F 换成二进制,高位表示左边的方格,低位表示右边的方格。1代表白色,0代表黑色。

输出格式:
每个样本第一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为可制作的不同大小棋盘的类别数量。以下 y 行每行包含两个整数,分别是棋盘边长和该边长的棋盘数量,并按棋盘大小降序排列。

限制条件:
1 ≤ T ≤ 100
1 ≤ M ≤ 512
1 ≤ N ≤ 512,N 是4的倍数

示例输入:
4
15 20
55555
FFAAA
2AAD5
D552A
2AAD5
D542A
4AD4D
B52B2
52AAD
AD552
AA52D
AAAAA
5AA55
A55AA
5AA55
4 4
0
0
0
0
4 4
3
3
C
C
4 4
6
9
9
6

示例输出:
Case #1: 5
6 2
4 3
3 7
2 15
1 57
Case #2: 1
1 16
Case #3: 2
2 1
1 12
Case #4: 1
2 4

[ 本帖最后由 周瑜 于 2010-6-9 14:09 编辑 ]


附件: 12 制作棋盘.rar (2010-6-8 01:07, 42.37 K)
该附件被下载次数 120
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:50 资料 主页 文集 短消息 只看该作者
13 完美菱形

(由于论坛显示限制,本题数字与空格使用了全角字符,请读者自行转化为半角字符,测试样本实际输入字符也是半角字符)
通过一个菱形的中心,沿水平和竖直方向各作一条轴,如果菱形上的数关于这两条轴对称,那么这个菱形就是一个完美菱形。以下分别是边长为2和3的两个完美菱形:
 1      1
2 2    2 2
 1    3 4 3
       2 2
        1
对于任意一个菱形,如果不是完美的,都可以通过添加一些数字,把这个菱形变得完美。下图中,左边是原菱形,右边是添加后的完美菱形:
        5
 4     4 4
2 3   2 3 2
 4     4 4
        5
给定一个菱形,求最少需要添加多少个数字才能把这个菱形变得完美。

输入格式:
第一行为测试样本数量 T ,每个样本包含 2k 行,第一行为菱形边长 k ,以下 2k-1 行为菱形初始数据,菱形中的每个数字都不大于 9。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为最少需要添加的数字个数。

限制条件:
1 ≤ T ≤ 100
1 ≤ k ≤ 51

示例输入:




 1
2 2
 1

 1
1 2
 1

  1
 6 3
9 5 5
 6 3
  1

示例输出:
Case #1: 0
Case #2: 0
Case #3: 5
Case #4: 7

[ 本帖最后由 周瑜 于 2010-6-13 19:08 编辑 ]


附件: 13 完美菱形.rar (2010-6-11 02:07, 16.91 K)
该附件被下载次数 109
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:51 资料 主页 文集 短消息 只看该作者
14 世界杯门票

南非世界杯已开幕,现在准备购买门票前往观看第二阶段淘汰赛。由于门票紧张,所有球票都应在第一轮比赛开始之前购买。每场比赛的开赛时间都不同,可以观看全部比赛。

淘汰赛共有 2^P 支球队参加,经过 P 轮比赛决出冠军。每场比赛必然分出胜负,否则加时点球,每轮之后有一半的球队被淘汰出局。淘汰赛开始后,每支球队的晋级路线、第一轮对手和以后各轮可能遇到的对手都已确定,而不用像冠军杯一样每轮之后抽签。

根据喜好不同,最多允许错过各球队 Mi 场比赛。即无论出现什么样的晋级可能,观看选择的比赛后,错过每支球队的比赛都不超过 Mi 场。

已知各场比赛的票价,和允许错过的场次,求最少需要花费多少钱购买门票才能满足要求。

输入格式:
第一行为测试样本数量 T ,每个样本包含 P+2 行,第一行为 P ,第二行有 2^P 个整数,分别是每支球队最多允许错过的比赛数 Mi ,以下 P 行为各场比赛门票 Si ,每行分别有 P/2, P/4, ...,4,2,1个整数。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为需要购买的门票价格总和最小值。

限制条件:
1 ≤ T ≤ 50
1 ≤ P ≤ 10
0 ≤ Mi ≤ P
0 ≤ Si ≤ 100000

示例输入:
2
2
1 1 0 1
1 1
1
3
1 2 3 2 1 0 1 3
100 150 50 90
500 400
800

示例输出:
Case #1: 2
Case #2: 1350

示例解释:
第二个例子中,由于不允许错过第六支球队的比赛,因此晋级路线上的三场比赛门票都应购买,花费50+400+800,此时唯有第一支球队观看要求未满足,选择购买其最便宜的一场100。这样,总花费是1350。

[ 本帖最后由 周瑜 于 2010-6-16 12:08 编辑 ]


附件: 14 世界杯门票.rar (2010-6-15 00:43, 43.78 K)
该附件被下载次数 106
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:51 资料 主页 文集 短消息 只看该作者
15 细菌繁殖

在一块无限大平面上,许多细菌在正整数坐标点上繁殖与消亡,其规则如下:

1. 如果某细菌坐标点相邻的上方和左方都没有细菌,下一秒钟该细菌会消亡。
2. 如果某无细菌坐标点相邻的上方和左方都有细菌,下一秒钟此处会新产生一个细菌。
3. 其余坐标点保持不变。

上方指 y 坐标减小的方向,左方指 x 坐标减小的方法。在一个坐标点最多同时存在一个细菌,所有细菌的产生和消亡都一秒一秒同步进行,同一坐标同一秒钟不会同时发生产生与消亡。

例如,某平面的细菌分布如下(1表示有细菌,0表示无细菌):
000010
011100
010000
010000
000000


6秒钟后,所有细菌会全部消亡,具体过程是:
000000   000000   000000   000000   000000   000000
001110   000110   000010   000000   000000   000000
011000   001100   000110   000010   000000   000000
010000   011000   001100   000110   000010   000000
000000   000000   000000   000000   000000   000000


已知初始状态细菌的分布,求经过多少秒后所有细菌会全部消亡。

输入格式:
第一行为测试样本数量 T ,每个样本用若干矩形表示初始细菌分布,在这些矩形内全是细菌,矩形可相互重叠和包含。
每个样本第一行为 R ,表示该样本的矩形数量,以下 R 行每行有以空格分隔的四个整数X1,Y1,X2,Y2,表示该矩形区域内全是细菌。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为细菌全部消亡所需要的秒数。

限制条件:
1 ≤ T ≤ 100
1 ≤ R ≤ 1000
1 ≤ X1 ≤ X2 ≤ 1000000
1 ≤ Y1 ≤ Y2 ≤ 1000000

示例输入:
1
3
5 1 5 1
2 2 4 2
2 3 2 4

示例输出:
Case #1: 6

[ 本帖最后由 周瑜 于 2010-10-21 15:10 编辑 ]


附件: 15 细菌繁殖.rar (2010-6-15 06:08, 58.65 K)
该附件被下载次数 102
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:51 资料 主页 文集 短消息 只看该作者
16 草原牧羊

现有 N 只羊,在无限大的草原上放牧。每只羊用长度为 Li 的绳子栓在一个位于 Pi 的木桩上,其活动范围为到 Pi 的距离不超过 Li 的区域。

另打算设一水槽,每只羊必须都能到达水槽饮水。但所有羊只聚在一起时会发生斗殴,因此应使所有羊都能活动的公共区域尽可能小。

木桩位置 Pi 均固定,但绳长 Li 不固定。水槽位于 M 个可能位置之一,用 Q1, Q2, ..., QM 表示。

已知 Pi 和 Qi,对于每一处 Qi 求所有羊都能活动的最小公共区域面积。

输入格式:
第一行为测试样本数量 T ,每个样本包含 N+M+1 行,第一行为 N 和 M 两个整数,以下 N 行每行有两个整数,表示木桩 Pi 坐标,接下来 M 行每行也有两个整数,表示水槽可能的坐标 Qi 。

输出格式:
每一行为 Case #x: A1 A2...AM 的格式,其中 x 为1开始的测试样本序号,Ai 为水槽设在 Qi 位置时的羊群可活动的最小公共区域面积,并用空格分隔。
绝对或相对误差不超过 10^(-6) 均视为正确。

限制条件:
1 ≤ T ≤ 10
2 ≤ N ≤ 5,000
1 ≤ M ≤ 1,000
Pi 和 Qi 坐标绝对值不超过 10, 000
Pi 和 Qi 没有任何两点重合
Pi 和 Qi 没有任何三点共线

示例输入:
3
2 3
0 20
20 0
-20 10
40 20
0 19
4 2
0 0
100 100
300 0
380 90
400 100
1000 5
3 1
0 0
10 10
20 0
10 5

示例输出:
Case #1: 1264.9865911 1713.2741229 0.2939440
Case #2: 1518.9063729 1193932.9692206
Case #3: 0.0000000

[ 本帖最后由 周瑜 于 2010-7-4 11:53 编辑 ]


附件: 16 草原牧羊.rar (2010-7-4 05:47, 92.87 K)
该附件被下载次数 101
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:51 资料 主页 文集 短消息 只看该作者
17 伪随机数

现有一种伪随机数的算法,可以生成 0~P-1 之间的随机数,其中 P 是质数。

任取一个初始值 S (0 ≤ S ≤ P-1) 和两个非负整数 A、B ,根据以下递推公式,可以得到一个伪随机数列。
S[0] = S
S[i+1] = (A*S[i] + B) mod P , i≥0

已知用上述方法生成的伪随机数列前 K 项,并且 P 是不超过 D 位的质数(P<10^D),求该伪随机数列的下一项。如果不存在或者可能存在多个不同的值,输出 I don't know.

输入格式:
第一行为测试样本数量 T ,每个样本包含两行,第一行为以空格分隔的D,K,第二行有 K 个整数,表示该数列的前 K 项。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为数列下一项或者 I don't know.

限制条件:
1 ≤ T ≤ 100
1 ≤ K ≤ 10
1 ≤ D ≤ 6

示例输入:
3
2 10
0 1 2 3 4 5 6 7 8 9
3 1
13
1 5
6 6 6 6 6

示例输出:
Case #1: 10
Case #2: I don't know.
Case #3: 6

[color=Silver][[i] 本帖最后由 周瑜 于 2010-6-16 12:07 编辑 [/i]][/color]


附件: 17 伪随机数.rar (2010-6-17 00:07, 1.96 K)
该附件被下载次数 126
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:52 资料 主页 文集 短消息 只看该作者
18 修建栅栏

我们需要修建一个非常长的栅栏,因此需要到商店中购买较短的栅栏拼接起来。

商店中有 N 种不同长度的栅栏出售,每种栅栏都可无限购买。为了节省原料,所有栅栏的长度相加应恰好等于所需要栅栏的长度。

已知需要修建的栅栏长度为 L ,商店出售栅栏长度为 Bi (0 ≤ i < N),求最少需购买的栅栏数量。如果无法达到要求,输出 IMPOSSIBLE

输入格式:
第一行为测试样本数量 T ,每个样本包含两行,第一行为以空格分隔的 L,N,第二行有 N 个整数,表示商店出售的栅栏长度 Bi 。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为所需栅栏的数量或者 IMPOSSIBLE

限制条件:
1 ≤ T ≤ 50
10^10 ≤ L ≤ 10^18
1 ≤ N ≤ 100
1 ≤ Bi ≤ 100000

示例输入:
2
10000000001 3
23 51 100
10000000001 3
100 52 22

示例输出:
Case #1: 100000004
Case #2: IMPOSSIBLE

示例解释:
第一个例子,可以使用2个23,5个51,和99999997个100,总计100000004个栅栏。
第二个例子,只能拼接出偶数长度的栅栏。

[ 本帖最后由 周瑜 于 2010-6-17 12:22 编辑 ]


附件: 18 修建栅栏.rar (2010-6-18 00:22, 7.55 K)
该附件被下载次数 112
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:53 资料 主页 文集 短消息 只看该作者
19 热狗商人

在一条无限长的东西方向的大街上每隔相等距离就有一个路口,若干热狗商人正在某些路口出售热狗。如果有两个或者更多的商人聚集在同一个路口出售热狗,他们之间会相互影响生意,必须进行如下疏散。

疏散方法为:如果某路口有多于一个的热狗商人,那么其中一个移动到东面的下一个路口,另一个移动到西面的下一个路口,其余商人留在原地。如果还有多于一个商人的路口,则进行下一次疏散,直到所有路口的商人都不多于一个。

比如相邻七个路口的热狗商人数量为 0 0 2 1 2 0 0 ,疏散一次后变为 0 1 0 2 2 0 0 ,疏散两次后变为 0 1 1 0 3 0 0 ,疏散三次后变为0 1 1 1 1 1 0 ,疏散完成。

已知各路口热狗商人的分布情况,求需要经过多少次疏散才能使每个路口的商人都不多于一个。

输入格式:
输入时,只给出至少存在一个热狗商人的路口坐标,和该路口的商人个数,其余路口都没有商人存在。
第一行为测试样本数量 T ,每个样本包含 C+1 行,第一行为整数 C,表示至少存在一个热狗商人的路口数量,以下 C 行每行有 P 和 V 两个整数,表示在路口 P 有 V 个商人。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 为需要进行疏散的次数。

限制条件:
1 ≤ T ≤ 50
1 ≤ C ≤ 200
| Pi | ≤ 1,000,000
Pi ≠ Pj, if i ≠ j
∑Vi ≤ 100,000

示例输入:
2
3
-1 2
0 1
1 2
2
-1000 1
2000 1

示例输出:
Case #1: 3
Case #2: 0

[ 本帖最后由 周瑜 于 2010-7-16 21:00 编辑 ]


附件: 19 热狗商人.rar (2010-7-4 06:21, 35.02 K)
该附件被下载次数 98
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-25 04:53 资料 主页 文集 短消息 只看该作者
20 神秘加法

神秘加法是这样一种加法算式,如下所示:
 124
  31
  15
 ----
 170

神秘加法算式至少有一个加数,多则不限,所有加数都为不以0开头的正数。除了横线下的和以外,各个加数在同一数位上的数字必须互不相同。如百位上只有1,十位上是2,3,1,个位上是4,1,5。如果把第三个加数改为25(和为180),则十位上的2与第一个加数重复,此时该算式不再是神秘加法。

以上是一个十进制的神秘加法的例子,但我们还关心其他进位制的神秘加法。与十进制的定义相同,无论是多少进制,只要所有加数在同一数位上的数字或者符号互不相同,此算式就是一个神秘加法。

求和为 N 的 B 进制神秘加法有多少个,由于计算结果很大,只需要回答其个数除以 1000000007 所得余数。

注1:仅仅加数顺序不同的加法,是同一个神秘加法。
注2:本题运行时间较长。

输入格式:
第一行为测试样本数量 T ,以下 T 行每行有 N 和 B 两个整数,两个数都以十进制形式列出。

输出格式:
每一行为 Case #x: y 的格式,其中 x 为1开始的测试样本序号,y 如上所述。

限制条件:
1 ≤ T ≤ 20
1 ≤ N ≤ 10^18
2 ≤ B ≤ 70

示例输入:
2
6 10
8 4

示例输出:
Case #1: 4
Case #2: 4

示例解释:
第一个例子中,共有 6=6,1+5=6,2+4=6,1+2+3=6 四个和为 6 的神秘加法。
第二个例子中,共有 20=20,11+3=20,13+1=20,10+3+1=20 四个和为 20(即十进制的8) 的神秘加法。

[ 本帖最后由 周瑜 于 2010-7-17 10:01 编辑 ]


附件: 20 神秘加法.rar (2010-7-17 09:42, 559 bytes)
该附件被下载次数 102
顶部
性别:未知-离线 zhouhuan
(神鸟)

光禄大夫
白衣伯爵

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
组别 虎豹骑
级别 安南将军
好贴 1
功绩 233
帖子 2822
编号 89468
注册 2006-10-30


发表于 2010-5-25 08:18 资料 个人空间 短消息 只看该作者
占沙发待评论
顶部
性别:未知-离线 狂笑四海


Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 28
帖子 1714
编号 273316
注册 2008-4-2


发表于 2010-5-25 08:44 资料 个人空间 短消息 只看该作者
我也占个。

看到周大占楼26,莫非与字母有关?
顶部
性别:男-离线 dimeterio
(李秀辰)

Rank: 10Rank: 10Rank: 10Rank: 10
组别 校尉
级别 镇西将军
好贴 1
功绩 45
帖子 3985
编号 266634
注册 2008-2-7


发表于 2010-5-26 07:49 资料 个人空间 短消息 只看该作者 QQ
前排就座,无意识围观
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-5-26 08:36 资料 个人空间 短消息 只看该作者 QQ
晕,原来第一题是二进制计数啊
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-5-26 10:33 资料 个人空间 短消息 只看该作者 QQ


#include <stdio.h>

#define MaxN        30
#define MaxK        10e8



unsigned long _2N(unsigned int N){
        unsigned int i;
        unsigned long result=1;
        i=N;
        while(i--)result*=2;
        return(result);
}


unsigned int lighting(unsigned int N,unsigned long K){
        unsigned int result;
        unsigned int N1;
        unsigned long K1;
        N1=_2N(N);
        K1=K+1;
        result=!(unsigned int)(K1%N1);
        return(result);
}


void main(){
        unsigned int T;
        unsigned int N[255];
        unsigned long K[255];
        unsigned int i;

        scanf("%d\n",&T);
        for (i=0;i<=T-1;++i)
                scanf("%d %d\n",&N[i],&K[i]);
        for (i=0;i<=T-1;++i){
                printf("Case #%d:",i+1);
                if (N[i]==0 || N[i]>MaxN || K[i]>MaxK)
                        printf("ERROR\n");
                else if(lighting(N[i],K[i]))
                        printf("ON\n");
                else printf("OFF\n");
        }
        printf("Press any key to exit...\n");
        getchar();

}

顶部
性别:男-离线 张洋
(五湖废人)

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
功绩 10
帖子 996
编号 340557
注册 2009-9-25
家族 轩辕丐帮


发表于 2010-5-26 12:48 资料 文集 短消息 只看该作者
楼主这是变相增加发帖量吗?
话说编程俺还真的不懂
顶部
性别:未知-离线 崔浩

Rank: 12Rank: 12Rank: 12
组别 羽林都尉
级别 征东将军
功绩 54
帖子 5150
编号 327375
注册 2009-6-13


发表于 2010-5-26 18:34 资料 个人空间 短消息 只看该作者
周公瑾童鞋占楼甚是凶猛,不过俺在此纯路过
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4716
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-5-26 23:47 资料 主页 文集 短消息 只看该作者
这区不能发附件,版主帮忙转到设计与修改去吧。
顶部
性别:男-离线 岱瀛
(deving)

长平侯
川峡东路经略使
监管使

Rank: 19Rank: 19Rank: 19Rank: 19
组别 经略使
级别 左将军
好贴 1
功绩 2293
帖子 1370
编号 55810
注册 2005-12-22
来自 人间
家族 慕容世家


发表于 2010-5-29 00:38 资料 个人空间 短消息 只看该作者
第一题没怎么看明白,给画个电路图?

为啥串联的开关,第一个闭合,第二个打开,整个电路是断路啊,怎么有电流?


第三题公园,没有太细想,先按着条件写了一个,见附件。
输入in.txt,输出out.txt


附件: [源文件] Park.cpp (2010-5-29 00:38, 1.71 K)
该附件被下载次数 158


附件: [输入文件] in.txt (2010-5-29 00:38, 59 bytes)
该附件被下载次数 140
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-5-29 00:51 资料 个人空间 短消息 只看该作者 QQ
回复 #35 岱瀛 的帖子

从右往左数,最右边是第一个开关。

一开始是:

灯—00000000……00000000—电源,第一个断开的开关是通电的,那么按一下按钮之后,最后一个开关状态翻转:
灯—00000000……00000001—电源,此时电流通过第一个开关到达第二个开关,那么按第二次按钮后,前两个开关状态都翻转:
灯—00000000……00000010—电源,此时第一个开关通电,第二个开关断电,那么按第三次按钮后,仅第一个开关状态翻转:
灯—00000000……00000011—电源,此时电流通过前两个开关到达第三个开关,那么按第四次按钮后,前三个开关状态翻转:
灯—00000000……00000100—电源,

……

从前几步就可以看出,其实这就是二进制计数的题目。显然每按下一次按钮,开关序列组成的二进制数+1。
那么如果有N个开关,就需要按(K*2^N-1)次按钮才能把灯点亮。(K为正整数。)

--------------------------------------------------------------

另外,通电未必等于有电流,如果电源是市电220V火线,你用手碰一下通电的开关……

[ 本帖最后由 阿尔法孝直 于 2010-5-29 00:53 编辑 ]


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-12-22 00:25
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.024561 second(s), 11 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP