虐题时间!关于PKU的ACM选拔赛

    昨天本来写了很大一段文字的。经过再三的考虑,我还是决定删掉了和古汉MM及其现任男友相关的一些很纠结的文字。到底我写了些啥,大家自己YY去。
    长话短说,昨天上午发生牛B事儿了。有人发个短信来,问我参不参加ACM选拔赛。我以为是什么牛B人搞到我手机号码了呢,结果古汉MM来一短信,说他男友要了我的手机号来找我组队来了。本来一直在说,大学只在道上混,不搞ACM的;但当ACM真正来到我身边时,我开始犹豫了。有趣的是,若不是古汉MM她男友发短信来找我,我还真不知道有ACM选拔赛这回事。我在BBS上寻找今年ACM选拔赛的消息,开始盘算我还需要复习多少东西。找到了一份去年的题目,看见最后一道题名字叫“选课”,心想估计是那个著名的多叉转二叉。看来这个选拔赛的难度还是比较适中的。我在想,信科的竞赛班现在应该还不会涉及多叉转二叉的树形DP吧,那个信科的看到了肯定立马就愣了。我开始考虑是否需要另外找人组队,不要那个信科的了。然后我毫无防备地点开链接,“叭”的一声晕倒在地上:

Description
教务网站如期的在选课之日出问题了,这次的问题是登陆窗口的验证码无法显示了,同学们只能靠猜验证码来登陆选课。教务的登陆系统刚刚经过改进,改进后的验证码均为1..N的一个排列。一般的同学们在试验的时候都是按照所有排列的字典序逐个试验,但是TN发掘这样试验很乏味,所以他决定每次尝试前一个排列后面的第M个排列。
但是一段时间之后他发现,寻找一个排列后面的第M个排列并不是一件容易的事情,所以他希望你帮助他。
Input
Line 1: N (1 <= N <= 10000)
Line 2: M (1 <= M <= 100)
Line 3: 1..N的一个排列
Output
所求的排列

    看来,和传说中的一样,PKU的ACM果然抓得没有那么紧。我又开始犹豫,到底要不要去参加这个选拔赛,又要不要跟古汉MM的男友一起合作。如果有谁心烦了想虐题的,我负责去找些信科的作业来。
    大家上得了这个网页不?点那个“竞赛题目”进入愉快的虐题之旅吧。07年的那个页面貌似有几个死链。06年的题目很全,我在这里发一下。长期被题目虐?准备开始虐一下传说中PKU的ACM选拔赛吧。顺便给某个跟我说想学Computer Science的MM看看,信息学会涉及一些什么样的问题。

A. Pell数列
Description
Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
Input
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。
Output
n行,每行输出对应一个输入。输出应是一个非负整数。
 
(本以为要用矩阵呢)

 

B. 二叉树
Description
如上图所示,由正整数1,2,3……组成了一颗二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。
比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。
Input
输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示输入的结束,这组数据不用处理。
Output
对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。

 

C. 金银岛
Description
某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1, n2, ... , ns,同时每个种类的金属总的价值也不同,分别为v1,v2, ..., vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。
Input
第1行是测试数据的组数k,后面跟着k组输入。
每组测试数据占3行,第1行是一个正整数w (1 <= w <= 10000),表示口袋承重上限。第2行是一个正整数s (1 <= s <=100),表示金属种类。第3行有2s个正整数,分别为n1, v1, n2, v2, ... , ns, vs分别为第一种,第二种,...,第s种金属的总重量和总价值(1 <= ni <= 10000, 1 <= vi <= 10000)。
Output
k行,每行输出对应一个输入。输出应精确到小数点后2位。

 

D. 集合加法
Description
给出2个正整数集合A = {pi | 1 <= i <= a},B = {qj | 1 <= j <= b}和一个正整数s。问题是:使得pi + qj = s的不同的(i, j)对有多少个。
Input
第1行是测试数据的组数n,后面跟着n组测试数据。
每组测试数据占5行,第1行是和s (1 <= s <= 10000),第2行是一个正整数a (1 <= a <= 10000),表示A中元素的数目。第3行是a个正整数,每个正整数不超过10000,表示A中的元素。第4行是一个正整数b (1 <= b <= 10000),表示B中元素的数目。第5行是b个正整数,每个正整数不超过10000,表示B中的元素。
注意:这里的集合和数学书上定义的集合有一点点区别——集合内可能包含相等的正整数。
Output
n行,每行输出对应一个输入。输出应是一个非负整数。

 

E. 迷宫
Description
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。
Input
第1 行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。
Output
k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。

 

F. 算24
Description
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。
比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
Input
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
Output
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。

 

G. 孙子问题
Description
我国古代《孙子算经》中,记有如下算题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”并给出得数:“答曰:23。”
为解决这个问题民间流传了如下歌诀:“三人同行七十稀,五树梅花廿一枝,七子团员正半月,除百零五便得知。”
把上面的问题说得明白一点就是:有一个正整数N,除以3的余数是2,除以5的余数是3,除以7的余数是2,要求这个数。
民间给出的解法是:把N除以3的余数乘以70,把N除以5的余数乘以21,把N除以7的余数乘以15,把这三个结果加起来,最后把得到的结果除以105得到的就是答案。
其实在民间的解法中不除以105得到的也是一个符合题意的答案,而且民间的解法对于已知“除以3的余数,除以5的余数和除以7的余数” 的问题都能得到一个符合要求的答案。比如对于上面的问题,得到的结果是2 * 70 + 3 * 21 + 2 * 15 = 233,这个结果也能满足除以3的余数是2,除以5的余数是3,除以7的余数是2。如果已知的问题是“除以3的余数是1,除以5的余数是4,除以7的余数是4”,民间解法得到的结果1 * 70 + 4 * 21 + 4 * 15 = 214,这个结果也满足除以3的余数是1,除以5的余数是4,除以7的余数是4。
把这个问题推广到更普遍的情况:对于给定的正整数a1, a2, ... an,是否存在正整数b1, b2, ... bn,使得对于任意的一个正整数N,如果用N除以a1的余数是p1,用N除以a2的余数是p2……用N除以an的余数是pn,那么M = p1 * b1 + p2 * b2 + ... + pn * bn能满足M除以a1的余数也是p1,M除以a2的余数也是p2……M除以an的余数也是pn。
Input
输入包括多组测试数据,每组数据包括一行。在每组数据中,首先给出ai的个数n (1 <= n <= 10),然后给出n个不大于50的正整数a1, a2, ... an。最后一组测试数据中n = 0,表示输入的结束,这组数据不用处理。
Output
对于每一组测试数据,输出一行,如果存在正整数b1, b2, ... bn满足题意,则输出这n个正整数(数的长度不要超过50位)如果有多组答案,输出任意一组即可,相邻的正整数之间用一个空格隔开;否则,输出“NO”。

 

H. 矩形覆盖
Description
在平面上给出了n个点,现在需要用一些平行于坐标轴的矩形把这些点覆盖住。每个点都需要被覆盖,而且可以被覆盖多次。每个矩形都至少要覆盖两个点,而且处于矩形边界上的点也算作被矩形覆盖。注意:矩形的长宽都必须是正整数,也就是说矩形不能退化为线段或者点。
现在的问题是:怎样选择矩形,才能够使矩形的总面积最小。
Input
输入包括多组测试数据。每组测试数据的第一行给出n (2 <= n <= 15),表示平面上的点数。后面的n行,每行上包括两个整数x, y (-1000 <= x, y <= 1000),给出一个点在平面上的x坐标和y坐标。输入数据保证:这n个点在平面上的位置各不相同。
最后一组测试数据中n = 0,表示输入的结束,这组数据不用处理。
Output
对每一组测试数据,输出一行,包括一个正整数,给出矩形的最小总面积。

 

I. 数字求和
Description
给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?
Input
输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
Output
输出一行,给出一个正整数,是5个数中小于a的数的和。

    再前面的几届题还是挺科学的。不知道是不是因为大家反映说太难了,06年开始就变得那么“普及”了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值