搜索测试题目(题解后续更新)

  1. 午餐费
    内存限制:256 MiB
    时间限制:1000 ms
    输入文件:lunch.in
    输出文件:lunch.out
    题目类型:传统
    评测方式:文本比较
    题目描述
    现要对某班学生进行N天培训,该班所有学生都订了N天的午餐,所以我们知道他们每天要花多少钱。现在该班班主任需要决定如何使用班费。由于钱有限,他们不可能每天都吃免费午餐。因此,每天班主任可以选择自己支付或使用班费支付当天午餐费。当然,班主任比较小气,希望尽可能多地花掉班费,但是他太忙了,请你帮他计算他最多能够花多少班费。
    输入格式
    输入包含多个测试数据(不超过50个)。
    每个测试数据有两行。第一行有两个整数,N为培训天数,M为班费总数。
    第二行包含N个正整数,其中第i个整数表示该班当天需要支付第午餐的钱。所有这些整数都不超过10000000,整数之间用空格分隔。
    输出格式
    对于每个测试数据,输出一行整数,表示班主任能够花班费的最大金额
    样例
    样例输入
3 10
8 4 5

样例输出

9

数据范围与提示
1 <= N <= 30
0 <= M <= 10000000

  1. 生日快乐
    内存限制:162 MiB
    时间限制:1000 ms
    输入文件:birthday.in
    输出文件:birthday.out
    题目类型:传统
    评测方式:文本比较
    题目描述
    windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。windy主刀,每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成 N 块蛋糕,windy必须切 N-1 次。为了使得每块蛋糕看起来漂亮,我们要求 N块蛋糕的长边与短边的比值的最大值最小。你能帮助windy求出这个比值么?
    输入格式
    包含三个整数,X Y N。1 <= X,Y <= 10000 ; 1 <= N <= 10
    输出格式
    包含一个浮点数,保留6位小数。
    样例
    样例输入
5 5 5

样例输出

1.800000
  1. 碎纸机
    内存限制:256 MiB
    时间限制:1000 ms
    输入文件:paper.in
    输出文件:paper.out
    题目类型:传统
    评测方式:文本比较 
    题目描述
    你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点:
  • 每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。
  • 碎纸机切出的每个纸片上都包括一个数。
  • 要求切出的每个纸片上的数的和要不大于目标数而且与目标数最接近。
    举一个例子,如下图,假设目标数是50,输入纸片上的数是12346。碎纸机会把纸片切成4块,分别包含1,2,34和6。这样这些数的和是43 (= 1 + 2 + 34 + 6),这是所有的分割方式中,不超过50,而又最接近50的分割方式。又比如,分割成1,23,4和6是不正确的,因为这样的总和是34 (= 1 + 23 + 4 + 6),比刚才得到的结果43小。分割成12,34和6也是不正确的,因为这时的总和是52 (= 12 + 34 + 6),超过了50。

    还有三个特别的规则:
  • 如果目标数和输入纸片上的数相同,那么纸片不进行切割。
  • 如果不论怎样切割,分割得到的纸片上数的和都大于目标数,那么打印机显示错误信息。
  • 如果有多种不同的切割方式可以得到相同的最优结果。那么打印机显示拒绝服务信息。比如,如果目标数是15,输入纸片上的数是111,那么有两种不同的方式可以得到最优解,分别是切割成1和11或者切割成11和1,在这种情况下,打印机会显示拒绝服务信息。
    为了设计这样的一个碎纸机,你需要先写一个简单的程序模拟这个打印机的工作。给定两个数,第一个是目标数,第二个是输入纸片上的数,你需要给出碎纸机对纸片的分割方式。
    输入格式
    输入包括多组数据,每一组包括一行。每行上包括两个正整数,分别表示目标数和输入纸片上的数。已知输入保证:两个数都不会以0开头,而且两个数至多都只包含6个数字。
    输入的最后一行包括两个0,这行表示输入的结束。
    输出格式
    对每一组输入数据,输出相应的输出。有三种不同的输出结果:
    sum part1 part2 ...
    rejected
    error
    第一种结果表示:
  • 每一个partj是切割得到的纸片上的一个数。partj的顺序和输入纸片上原始数中数字出现的次序一致。
  • sum是切割得到的纸片上的数的和,也就是说:sum = part1 + part2 +...
    第一种结果中相邻的两个数之间用一个空格隔开。
    如果不论怎样切割,分割得到的纸片上数的和都大于目标数,那么打印“error”。
    如果有多种不同的切割方式可以得到相同的最优结果,那么打印“rejected”。
    样例
    样例输入
50 12346
376 144139
927438 927438
18 3312
9 3142
25 1299
111 33333
103 862150
6 1104
0 0

样例输出

43 1 2 34 6
283 144 139
927438 927438
18 3 3 12
error
21 1 2 9 9
rejected
103 86 2 15 0
rejected
  1. 单词序列
    内存限制:128 MiB
    时间限制:1000 ms
    输入文件:word.in
    输出文件:word.out
    题目类型:传统
    评测方式:文本比较
    题目描述
    给出两个单词(开始单词和结束单词)以及一个词典。找出从开始单词转换到结束单词,所需要的最短转换序列。转换的规则如下:
  • 每次只能改变一个字母
  • 转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中
    例如:
    开始单词为:hit
    结束单词为:cog
    词典为:[hot,dot,dog,lot,log,mot]
    那么一种可能的最短变换是: hit -> hot -> dot -> dog -> cog
    所以返回的结果是序列的长度5;
    注意:
  • 如果不能找到这种变换,则输出0;
  • 词典中所有单词长度一样;
  • 所有的单词都由小写字母构成;
  • 开始单词和结束单词可以不在词典中。
    输入格式
    共两行
    第一行为开始单词和结束单词(两个单词不同),以空格分开。
    第二行为若干的单词(各不相同),以空格分隔开来,表示词典。
    输出格式
    输出转换序列的长度。
    样例
    样例输入
hit cog
hot dot dog lot log

样例输出

5

数据范围与提示
30%的数据字符串长度≤4,字典里单词个数≤30,字母是'a'到'd';
60%的数据字符串长度≤6,字典里单词个数≤100,字母是'a'到'h';
100%的数据字符串长度≤8,字典里单词个数≤1000,字母是'a'到'z';

  1. 炸僵尸
    内存限制:256 MiB
    时间限制:1000 ms
    输入文件:zombie.in
    输出文件:zombie.out
    题目类型:传统
    评测方式:文本比较 
    题目描述
    妈妈得知小星星成功地解决了买玩具难题,奖励他去看电影《生化危机 6》,小星星看着看着就替女主角担心起来了,因为她要对付那么多的僵尸怪物,小星星恨不得扔颗炸弹消除可恶的僵尸们,他脑袋里开始构思出这样的场景:

    在一个 N 行 M 列单元格构成的地图中,去放置一个炸弹,这种炸弹威力巨大,以放置点为中心进行行列延伸炸到同行同列的僵尸,但不能穿墙。上图中可以把炸弹放置在第 3 行第 4 列,最多可以炸到 4 个僵尸,如果对地图稍加改动(如下图),在第 5 行第 4 列处加入一个墙体,又如何呢?答案还是最多炸到 4 个僵尸,只不过最佳炸弹放置点发生了变化,应该放到第 6 行第 6 列的位置。

    当然炸弹要靠勇敢的小星星去放,他只能在地图中朝上下左右四个方向行进(不能斜对 角移动) ,他不能穿墙,也不能穿越僵尸,要保证他的安全,如下图,告诉你小星星起始位 置是第 2 行第 2 列,那么他的最佳放置炸弹位置应该是第 3 行第 2 列,最多炸到 2 个僵尸。

    现在请聪明的你也一起加入到消除僵尸的队伍来。
    输入格式
    第一行四个用空格隔开的正整数表示 N,M,X,Y,分别表示 N 行 M 列的地图,小星星起 始位置第 X 行,第 Y 列。
    接下来 N 行 M 列用来描述地图上每个单元格,‘ G’表示僵尸,‘#’表示墙体,只有‘.’ 表示的单元格才是小星星能够正常行走,能够放置炸弹的单元格。(数据保证四面都是墙体, 也就是第 1 行、第 N 行、第 1 列、第 M 列肯定都是墙体)。
    输出格式
    一个整数,最多能炸掉的僵尸数量。
    样例
    样例输入
13 13 4 2
#############
###..GG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.#.#
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
#############

样例输出
10
数据范围与提示
100%的数据,保证 N,M<2001
100%的数据,保证 X<N
100%的数据,保证 Y<M

  1. A计划
    内存限制:256 MiB
    时间限制:1000 ms
    输入文件:plan.in
    输出文件:plan.out
    题目类型:传统
    评测方式:文本比较  
    题目描述
    可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
    现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
    输入格式
    输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N * M迷宫的大小。T如上所意。接下去的前N * M表示迷宫的第一层的布置情况,后N * M表示迷宫第二层的布置情况。
    输出格式
    如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
    样例
    样例输入
1
5 5 14
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.#..

样例输出
YES
数据范围与提示
1 <= N,M <=10

posted @ 2021-03-13 14:40  cqbz  阅读(83)  评论(0编辑  收藏  举报