1 PTA-算法设计与分析-AC原题 2 7-1 最大子列和问题 (20分) 3 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为全部连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。 4 本题旨在测试各类不一样的算法在各类数据状况下的表现。各组测试数据特色以下: 5 数据1:与样例等价,测试基本正确性; 6 数据2:102个随机整数; 7 数据3:103个随机整数; 8 数据4:104个随机整数; 9 数据5:105个随机整数; 10 输入格式: 11 输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。 12 输出格式: 13 在一行中输出最大子列和。若是序列中全部整数皆为负数,则输出0。 14 输入样例: 15 16 6 17 -2 11 -4 13 -5 -2 18 输出样例: 19 20 20 21 22 做者: DS课程组 23 单位: 浙江大学 24 时间限制: 50000 ms 25 内存限制: 64 MB 26 代码长度限制: 16 KB 27 题目详情 28 29 7-2 求素数个数 (30分) 30 求素数的个数。本题要求编写一个程序,求1~n的素数个数。 要求至少给出两种解法,对于相同的n,给出这两种解法的结果,经过相关数据进行测试,目的是经过对比同一问题不一样解法的绝对执行时间体会如何设计“好”的算法。 31 输入格式: 32 输入在一行中给出1个整数n(<= 10 000 000)。 33 输出格式: 34 对每一组输入,在一行中输出1~n的素数个数。 35 输入样例1: 36 37 5 38 输出样例1: 39 40 3 41 输入样例2: 42 43 14 44 输出样例2: 45 46 6 47 48 做者: 李廷元 49 单位: 中国民用航空飞行学院 50 时间限制: 200 ms 51 内存限制: 64 MB 52 代码长度限制: 16 KB 53 题目详情 54 7-3 统计字符 (20分) 55 统计一个给定字符串中指定的字符出现的次数。 56 输入格式: 57 测试输入包含若干测试用例,每一个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也多是要求被统计的字符之一。当读到'#'时输入结束,相应的结果不要输出。 58 输出格式: 59 对每一个测试用例,统计第1行中字符串的每一个字符在第2行字符串中出现的次数,按以下格式输出: c n0 60 c1 n1 61 c2 n2 62 ... 63 其中ci是第1行中第i个字符,ni是ci出现的次数。 64 输入样例: 65 66 I 67 THIS IS A TEST 68 i ng 69 this is a long test string 70 # 71 输出样例: 72 73 I 2 74 i 3 75 5 76 n 2 77 g 2 78 样例解释: 79 第2个测试用例中,空格也是被统计的字符之一。 80 做者: 李廷元 81 单位: 中国民用航空飞行学院 82 时间限制: 400 ms 83 内存限制: 64 MB 84 代码长度限制: 16 KB 85 题目详情 86 87 7-4 礼尚往来 (20分) 88 吉哥仍是那个吉哥,那个江湖人称“叽叽哥”的基哥。每当节日来临,女朋友众多的叽叽哥老是能从全国各地的女朋友那里收到各类礼物。有礼物收到固然值得高兴,但回礼确是件麻烦的事!不管多麻烦,总很差意思收礼而不回礼,那也不是叽叽哥的风格。如今,即爱面子又抠门的叽叽哥想出了一个绝妙的好办法:他准备将各个女朋友送来的礼物合理分配,再回送不一样女朋友,这样就不用再花钱买礼物了!假设叽叽哥的n个女朋友每人送他一个礼物(每一个人送的礼物都不相同),如今他须要合理安排,再回送每一个女朋友一份礼物,重点是,回送的礼物不能是这个女朋友以前送他的那个礼物,否则,叽叽哥可就摊上事了,摊上大事了......如今,叽叽哥想知道总共有多少种知足条件的回送礼物方案呢? 89 输入格式: 90 输入数据第一行是个正整数T,表示总共有T组测试数据(T <= 100); 每组数据包含一个正整数n,表示叽叽哥的女朋友个数为n( 1 <= n <= 100 )。 91 输出格式: 92 请输出可能的方案数,由于方案数可能比较大,请将结果对1000000007 取模后再输出。(提示:在递推过程当中,不断求余防止数据太大致使数据溢出。) 每组输出占一行。 93 输入样例: 94 95 3 96 1 97 2 98 4 99 100 输出样例: 101 102 0 103 1 104 9 105 106 107 做者: hcx11333 108 单位: 山东大学(威海) 109 时间限制: 1000 ms 110 内存限制: 64 MB 111 代码长度限制: 16 KB 112 题目详情 113 114 7-5 找单词 (20分) 115 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。那么,对于给定的字母,能够找到多少价值<=50的单词呢?单词的价值就是组成一个单词的全部字母的价值之和,好比,单词ACM的价值是1+3+14=18,单词HDU的价值是8+4+21=33。(组成的单词与排列顺序无关,好比ACM与CMA认为是同一个单词)。 116 输入格式: 117 输入首先是一个整数N,表明测试实例的个数。 而后包括N行数据,每行包括26个<=20的整数x1,x2,.....x26. 118 输出格式: 119 对于每一个测试实例,请输出能找到的总价值<=50的单词数,每一个实例的输出占一行。 120 输入样例: 121 122 2 123 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 124 9 2 6 2 10 2 2 5 6 1 0 2 7 0 2 2 7 5 10 6 10 2 10 6 1 9 125 126 输出样例: 127 在这里给出相应的输出。例如: 128 129 7 130 379297 131 132 133 做者: hcx11333 134 单位: 山东大学(威海) 135 时间限制: 1000 ms 136 内存限制: 64 MB 137 代码长度限制: 16 KB 138 题目详情 139 140 7-6 求最大元素值 (30分) 141 n个元素的数组的最大元素能够用递归计算出来。 定义方法:int max(int x, int y) 它返回x和y两个整数中的较大值。 试用递归编写方法:int arraymax(int[] a, int n) 它使用递归返回数组a的最大元素值。 终止条件:n==2 递归步骤:arraymax=max(max(a[0],...,a[n-2]), a[n-1]) 142 输入格式: 143 第一行的第一个元素是输入元素个数n (1<n<=30),第二个元素以后是输入n个元素; 144 输出格式: 145 按格式要求输出相邻两个元素的最大值,例如输出的第一项是a[0]和a[1]之间的最大值;第二项为以前的最大值与a[2]之间的最大值,依次类推,直到最后输出n个元素数组的最大元素值。 146 输入样例: 147 148 5 1 3 2 5 3 149 输出样例: 150 151 max(1,3)=3 max(3,2)=3 max(3,5)=5 max(5,3)=5 5 152 153 做者: 林华 154 单位: 广东外语外贸大学 155 000题目详情 156 157 7-7 求最大公约数 (30分) 158 使用展转相除法和递归求两个正整数m和n的最大公约数。 159 输入格式: 160 输入两个正整数m,n。 161 输出格式: 162 按要求输出展转相除过程及最终结果,输出结果之间空格分隔。 163 输入样例: 164 165 21 35 166 输出样例: 167 168 gcd(21,35) gcd(35,21) gcd(21,14) gcd(14,7) 7 169 170 做者: 林华 171 单位: 广东外语外贸大学 172 000题目详情 173 174 7-8 找第k小的数 (20分) 175 设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数。 176 提示:函数int partition(int a[],int left,int right)的功能是根据a[left]~a[right]中的某个元素x(如a[left])对a[left]~a[right]进行划分,划分后的x所在位置的左段全小于等于x,右段全大于等于x,同时利用x所在的位置还能够计算出x是这批数据按升非降序排列的第几个数。所以能够编制int find(int a[],int left,int right,int k)函数,经过调用partition函数得到划分点,判断划分点是否第k小,若不是,递归调用find函数继续在左段或右段查找。 177 输入格式: 178 输入有两行: 179 第一行是n和k,0<k<=n<=10000 180 第二行是n个整数 181 输出格式: 182 输出第k小的数 183 输入样例: 184 在这里给出一组输入。例如: 185 186 10 4 187 2 8 9 0 1 3 6 7 8 2 188 输出样例: 189 在这里给出相应的输出。例如: 190 191 2 192 193 做者: 陈晓梅 194 单位: 广东外语外贸大学 195 时间限制: 400 ms 196 内存限制: 64 MB 197 代码长度限制: 16 KB 198 题目详情 199 200 7-9 求逆序对数目 (20分) 201 注意:本问题算法的时间复杂度要求为O(nlogn), 不然得分无效 202 题目来源:http://poj.org/problem?id=1804 Background Raymond Babbitt drives his brother Charlie mad. Recently Raymond counted 246 toothpicks spilled all over the floor in an instant just by glancing at them. And he can even count Poker cards. Charlie would love to be able to do cool things like that, too. He wants to beat his brother in a similar task. 203 Problem Here's what Charlie thinks of. Imagine you get a sequence of N numbers. The goal is to move the numbers around so that at the end the sequence is ordered. The only operation allowed is to swap two adjacent numbers. Let us try an example: Start with: 2 8 0 3 swap (2 8) 8 2 0 3 swap (2 0) 8 0 2 3 swap (2 3) 8 0 3 2 swap (8 0) 0 8 3 2 swap (8 3) 0 3 8 2 swap (8 2) 0 3 2 8 swap (3 2) 0 2 3 8 swap (3 8) 0 2 8 3 swap (8 3) 0 2 3 8 204 So the sequence (2 8 0 3) can be sorted with nine swaps of adjacent numbers. However, it is even possible to sort it with three such swaps: Start with: 2 8 0 3 swap (8 0) 2 0 8 3 swap (2 0) 0 2 8 3 swap (8 3) 0 2 3 8 205 The question is: What is the minimum number of swaps of adjacent numbers to sort a given sequence?Since Charlie does not have Raymond's mental capabilities, he decides to cheat. Here is where you come into play. He asks you to write a computer program for him that answers the question in O(nlogn). Rest assured he will pay a very good prize for it. 206 输入格式: 207 The first line contains the length N (1 <= N <= 1000) of the sequence; The second line contains the N elements of the sequence (each element is an integer in [-1000000, 1000000]). All numbers in this line are separated by single blanks. 208 输出格式: 209 Print a single line containing the minimal number of swaps of adjacent numbers that are necessary to sort the given sequence. 210 输入样例: 211 在这里给出一组输入。例如: 212 213 6 214 -42 23 6 28 -100 65537 215 输出样例: 216 在这里给出相应的输出。例如: 217 218 5 219 220 做者: 陈晓梅 221 单位: 广东外语外贸大学 222 时间限制: 400 ms 223 内存限制: 64 MB 224 代码长度限制: 16 KB 225 题目详情 226 227 7-10 装箱问题 (20分) 228 假设有N项物品,大小分别为s一、s二、…、si、…、sN,其中si为知足1≤si≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以可以容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每一个物品所在的箱子序号,以及放置所有物品所需的箱子数目。 229 输入格式: 230 输入第一行给出物品个数N(≤1000);第二行给出N个正整数si(1≤si≤100,表示第i项物品的大小)。 231 输出格式: 232 按照输入顺序输出每一个物品的大小及其所在的箱子序号,每一个物品占1行,最后一行输出所需的箱子数目。 233 输入样例: 234 235 8 236 60 70 80 90 30 40 10 20 237 输出样例: 238 239 60 1 240 70 2 241 80 3 242 90 4 243 30 1 244 40 5 245 10 1 246 20 2 247 5 248 249 做者: DS课程组 250 单位: 浙江大学 251 时间限制: 400 ms 252 内存限制: 64 MB 253 代码长度限制: 16 KB 254 题目详情 255 256 7-11 汽车加油问题 (20分) 257 题目来源:王晓东《算法设计与分析》 258 一辆汽车加满油后可行驶 n千米。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。 259 输入格式: 260 第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n千米,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。 261 输出格式: 262 输出最少加油次数。若是没法到达目的地,则输出“No Solution!”。 263 输入样例: 264 265 7 7 266 1 2 3 4 5 1 6 6 267 输出样例: 268 269 4 270 271 做者: 陈晓梅 272 单位: 广东外语外贸大学 273 时间限制: 400 ms 274 内存限制: 64 MB 275 代码长度限制: 16 KB 276 题目详情 277 278 7-12 会场安排问题 (20分) 279 题目来源:王晓东《算法设计与分析》 280 假设要在足够多的会场里安排一批活动,并但愿使用尽量少的会场。设计一个有效的 贪心算法进行安排。(这个问题其实是著名的图着色问题。若将每个活动做为图的一个 顶点,不相容活动间用边相连。使相邻顶点着有不一样颜色的最小着色数,相应于要找的最小 会场数。) 281 输入格式: 282 第一行有 1 个正整数k,表示有 k个待安排的活动。 接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间 以 0 点开始的分钟计。 283 输出格式: 284 输出最少会场数。 285 输入样例: 286 287 5 288 1 23 289 12 28 290 25 35 291 27 80 292 36 50 293 输出样例: 294 在这里给出相应的输出。例如: 295 296 3 297 298 做者: 陈晓梅 299 单位: 广东外语外贸大学 300 时间限制: 400 ms 301 内存限制: 64 MB 302 代码长度限制: 16 KB 303 题目详情 304 305 7-13 最优合并问题 (20分) 306 题目来源:王晓东《算法设计与分析》 307 给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列须要m+n-1 次比较。试设 计一个算法肯定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还须要肯定合并这个序列的最差合并顺序,使所需的总比较次数最多。 308 输入格式: 309 第一行有 1 个正整数k,表示有 k个待合并序列。 第二行有 k个正整数,表示 k个待合并序列的长度。 310 输出格式: 311 输出最多比较次数和最少比较次数。 312 输入样例: 313 在这里给出一组输入。例如: 314 315 4 316 5 12 11 2 317 输出样例: 318 在这里给出相应的输出。例如: 319 320 78 52 321 322 做者: 陈晓梅 323 单位: 广东外语外贸大学 324 时间限制: 400 ms 325 内存限制: 64 MB 326 代码长度限制: 16 KB 327 题目详情 328 329 7-14 看电影 (20分) 330 终于到周末了,明明是特别喜欢看电影。他想在一天内尽可能多的看到完整的多部电影。 如今他把他喜欢的电影的播放时间表给你,但愿你能帮他合理安排。 331 输入格式: 332 输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。 接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每一个时间都用一个正整数表示。 当n=0时,输入结束。 333 输出格式: 334 对于每组输入,输出能完整看到的电影的个数。 335 输入样例: 336 在这里给出一组输入。例如: 337 338 12 339 1 3 340 3 4 341 0 7 342 3 8 343 15 19 344 15 20 345 10 15 346 8 18 347 6 12 348 5 10 349 4 14 350 2 9 351 0 352 输出样例: 353 在这里给出相应的输出。例如: 354 355 5 356 357 做者: 王会勇 358 单位: 河北科技大学 359 时间限制: 1000 ms 360 内存限制: 32 MB 361 代码长度限制: 16 KB 362 题目详情 363 364 7-15 最近距离 (30分) 365 在一个游戏中,玩家处于一个以下所示12行12列的迷宫: 366 0,1,0,0,0,1,1,1,0,1,0,1 367 0,0,0,1,0,0,0,0,1,0,0,1 368 0,1,0,1,0,1,1,1,0,1,0,0 369 0,1,0,0,0,0,0,1,0,0,1,1 370 0,0,0,0,1,0,0,0,0,0,0,0 371 0,0,1,0,0,0,1,0,0,0,1,0 372 0,0,1,0,0,0,0,0,1,0,0,0 373 1,0,0,1,0,1,0,0,0,1,0,1 374 0,0,1,0,1,0,1,0,1,0,0,0 375 0,0,0,0,0,1,0,0,0,1,1,0 376 0,0,0,0,0,1,0,0,0,0,0,0 377 0,1,0,1,0,0,0,1,0,1,0,0 378 其中迷宫由0,1组成,0表示道路,1表示障碍物。 379 如今要根据玩家和游戏中被攻击的虚拟boss所在位置,给玩家以最近距离的提示。 380 最近距离:即玩家走到boss所走的最少步数。(注:路线中的一步是指从一个坐标点走到其上下左右相邻坐标点。) 381 输入格式: 382 输入4个整数a,b,c,d(即玩家和虚拟boss在迷宫中的坐标位置分别为(a,b) 、(c,d)), 其中 0<=a,b,c,d<12。 383 输出格式: 384 输出在迷宫中从(a,b)出发到达(c,d)的最少步数,若是(a,b)永远没法到达(c,d)则输出10000。 385 输入样例: 386 在这里给出一组输入。例如: 387 388 0 0 11 11 389 输出样例: 390 在这里给出相应的输出。例如: 391 392 22 393 394 做者: 高见元 395 单位: 湖北经济学院 396 时间限制: 1000 ms 397 内存限制: 64 MB 398 代码长度限制: 16 KB 399 题目详情 400 401 7-16 子集和问题 (30分) 402 设集合S={x1,x2,…,xn}是一个正整数集合,c是一个正整数,子集和问题断定是否存在S的一个子集S1,使S1中的元素之和为c。试设计一个解子集和问题的回溯法。 403 输入格式: 404 输入数据第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值。接下来的1行中,有n个正整数,表示集合S中的元素。 是子集和的目标值。接下来的1 行中,有n个正整数,表示集合S中的元素。 405 输出格式: 406 输出子集和问题的解,以空格分隔,最后一个输出的后面有空格。当问题无解时,输出“No Solution!”。 407 输入样例: 408 在这里给出一组输入。例如: 409 410 5 10 411 2 2 6 5 4 412 输出样例: 413 在这里给出相应的输出。例如: 414 415 2 2 6 416 417 做者: 陈晓梅 418 单位: 广东外语外贸大学 419 时间限制: 400 ms 420 内存限制: 64 MB 421 代码长度限制: 16 KB 422 题目详情 423 424 7-17 最佳调度问题 (35分) 425 假设有n(n<=20)个任务由k(k<=20)个可并行工做的机器完成。完成任务i须要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 须要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成所有任务的时间最先。 426 输入格式: 427 输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务须要的时间。 428 输出格式: 429 将计算出的完成所有任务的最先时间输出到屏幕。 430 输入样例: 431 在这里给出一组输入。例如: 432 433 7 3 434 2 14 4 16 6 5 3 435 输出样例: 436 在这里给出相应的输出。例如: 437 438 17 439 440 做者: 陈晓梅 441 单位: 广东外语外贸大学 442 时间限制: 400 ms 443 内存限制: 64 MB 444 代码长度限制: 16 KB 445 题目详情 446 447 7-18 找零钱*** (20分) 448 收银员现有 n 张面值分别为 v1,v2,...,vn 的纸币。若找零金额为 m,则一共有多少种找零方法? 449 注:0<n≤1000,0<v1,v2,...,vn≤10000,0<m≤10000 450 输入格式 451 n v1,v2,...,vn m 452 输出格式 453 如有解,则输出所有找零方案,每输出一种 若无解,则输出“None” 454 输入样例1 455 456 6 457 3 1 4 3 2 7 458 9 459 输出样例1 460 461 3 1 3 2 462 3 4 2 463 4 3 2 464 2 7 465 输入样例2 466 467 5 468 5 3 4 6 7 469 2 470 输出样例2 471 472 None 473 474 做者: 李祥 475 单位: 湖北经济学院 476 时间限制: 400 ms 477 内存限制: 64 MB 478 代码长度限制: 16 KB 479 题目详情 480 481 7-19 工做分配问题 (20分) 482 设有n件工做分配给n我的。将工做i分配给第j我的所需的费用为cij 。 设计一个算法,对于给定的工做费用,为每个人都分配1 件不一样的工做,并使总费用达到最小。 483 输入格式: 484 输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工做费用。 485 输出格式: 486 将计算出的最小总费用输出到屏幕。 487 输入样例: 488 在这里给出一组输入。例如: 489 490 3 491 10 2 3 492 2 3 4 493 3 4 5 494 输出样例: 495 在这里给出相应的输出。例如: 496 497 9 498 499 做者: 陈晓梅 500 单位: 广东外语外贸大学 501 时间限制: 400 ms 502 内存限制: 64 MB 503 代码长度限制: 16 KB 504 题目详情 505 506 7-20 单调递增最长子序列 (20分) 507 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。 508 输入格式: 509 输入有两行: 第一行:n,表明要输入的数列的个数 第二行:n个数,数字之间用空格格开 510 输出格式: 511 最长单调递增子序列的长度 512 输入样例: 513 在这里给出一组输入。例如: 514 515 5 516 1 3 5 2 9 517 输出样例: 518 在这里给出相应的输出。例如: 519 520 4 521 522 做者: 陈晓梅 523 单位: 广东外语外贸大学 524 时间限制: 400 ms 525 内存限制: 64 MB 526 代码长度限制: 16 KB 527 题目详情 528 529 7-21 回文串问题 (40分) 530 一个字符串,若是从左到右读和从右到左读是彻底同样的,好比"aba",咱们称其为回文串。如今给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。 531 输入格式: 532 任意给定的一个字符串,其长度不超过1000. 533 输出格式: 534 能变成回文串所需添加的最少字符数。 535 输入样例: 536 在这里给出一组输入。例如: 537 538 Ab3bd 539 540 Abb 541 输出样例: 542 在这里给出相应的输出。例如: 543 544 2 545 546 1 547 548 做者: 高见元 549 单位: 湖北经济学院 550 时间限制: 1000 ms 551 内存限制: 64 MB 552 代码长度限制: 16 KB 553 题目详情 554 555 7-22 最大子段和 (20分) 556 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。 557 要求算法的时间复杂度为O(n)。 558 输入格式: 559 输入有两行: 560 第一行是n值(1<=n<=10000); 561 第二行是n个整数。 562 输出格式: 563 输出最大子段和。 564 输入样例: 565 在这里给出一组输入。例如: 566 567 6 568 -2 11 -4 13 -5 -2 569 输出样例: 570 在这里给出相应的输出。例如: 571 572 20 573 574 做者: 陈晓梅 575 单位: 广东外语外贸大学 576 时间限制: 400 ms 577 内存限制: 64 MB 578 代码长度限制: 16 KB 579 题目详情 580 581 7-23 整数拆分 (20分) 582 给定一个整数n,将其无序拆分红最大数为k的拆分数,(n,k不超出100) 要求:全部的拆分方案不重复。 如当n=4,k=4时,一共有5种拆分方案,拆分以下: 583 584 (1)4=1+1+1+1 585 (2)4=1+1+2 586 (3)4=1+3 587 (4)4=2+2 588 (5)4=4 589 输入格式: 590 每一行输入一组整数n,k,遇到键盘结束符^Z或文件结束符EOF时结束输入。 591 输出格式: 592 按行输出每组的拆分方案数。 593 输入样例: 594 595 4,4 596 5,4 597 输出样例: 598 599 5 600 6 601 602 做者: 张庆 603 单位: 集美大学 604 时间限制: 400 ms 605 内存限制: 64 MB 606 代码长度限制: 16 KB 607 题目详情 608 609 7-24 青蛙跳台阶 (30分) 610 一只青蛙一次能够跳上 1 级台阶,也能够跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 611 输入格式: 612 首先输入数字n,表明接下来有n组输入,50>=n>=0,而后每行一个数字,表明台阶数,数字为小于60的整数 613 输出格式: 614 对每一组输入,输出青蛙的跳法。 615 输入样例: 616 617 3 618 1 619 2 620 3 621 输出样例: 622 623 1 624 2 625 3 626 627 做者: 房正华 628 单位: 青岛工学院 629 时间限制: 400 ms 630 内存限制: 64 MB 631 代码长度限制: 16 KB 632 题目详情 633 634 7-25 朋友圈 (30分) 635 某学校有N个学生,造成M个俱乐部。每一个俱乐部里的学生有着必定类似的兴趣爱好,造成一个朋友圈。一个学生能够同时属于若干个不一样的俱乐部。根据“个人朋友的朋友也是个人朋友”这个推论能够得出,若是A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。 636 输入格式: 637 输入的第一行包含两个正整数N(≤30000)和M(≤1000),分别表明学校的学生总数和俱乐部的个数。后面的M行每行按如下格式给出1个俱乐部的信息,其中学生从1~N编号: 638 639 第i个俱乐部的人数Mi(空格)学生1(空格)学生2 … 学生Mi 640 641 输出格式: 642 输出给出一个整数,表示在最大朋友圈中有多少人。 643 输入样例: 644 645 7 4 646 3 1 2 3 647 2 1 4 648 3 5 6 7 649 1 6 650 输出样例: 651 652 4 653 654 做者: DS课程组 655 单位: 浙江大学 656 时间限制: 400 ms 657 内存限制: 64 MB 658 代码长度限制: 16 KB 659 题目详情 660 661 7-26 愿天下有情人都是失散多年的兄妹 (30分) 662 呵呵。你们都知道五服之内不得通婚,即两我的最近的共同祖先若是在五代之内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们到底是否能够成婚? 663 输入格式: 664 输入第一行给出一个正整数 665 N 666 (2 ≤ 667 N 668 ≤104),随后 669 N 670 行,每行按如下格式给出一我的的信息: 671 672 本人ID 性别 父亲ID 母亲ID 673 其中 674 ID 675 是5位数字,每人不一样;性别 676 M 677 表明男性、 678 F 679 表明女性。若是某人的父亲或母亲已经不可考,则相应的 680 ID 681 位置上标记为 682 -1 683 。 684 接下来给出一个正整数 685 K 686 ,随后 687 K 688 行,每行给出一对有情人的 689 ID 690 ,其间以空格分隔。 691 注意:题目保证两我的是同辈,每人只有一个性别,而且血缘关系网中没有乱伦或隔辈成婚的状况。 692 输出格式: 693 对每一对有情人,判断他们的关系是否能够通婚:若是两人是同性,输出 694 Never Mind 695 ;若是是异性而且关系出了五服,输出 696 Yes 697 ;若是异性关系未出五服,输出 698 No 699 。 700 输入样例: 701 702 24 703 00001 M 01111 -1 704 00002 F 02222 03333 705 00003 M 02222 03333 706 00004 F 04444 03333 707 00005 M 04444 05555 708 00006 F 04444 05555 709 00007 F 06666 07777 710 00008 M 06666 07777 711 00009 M 00001 00002 712 00010 M 00003 00006 713 00011 F 00005 00007 714 00012 F 00008 08888 715 00013 F 00009 00011 716 00014 M 00010 09999 717 00015 M 00010 09999 718 00016 M 10000 00012 719 00017 F 012 720 000 F 110 00013 721 00019 F 11100 00018 722 00020 F 00015 11110 723 00021 M 11100 00020 724 00022 M 00016 -1 725 00023 M 10012 00017 726 00024 M 00022 10013 727 9 728 00021 00024 729 00019 00024 730 00011 00012 731 00022 00018 732 00001 00004 733 00013 00016 734 00017 00015 735 00019 00021 736 00010 00011 737 输出样例: 738 739 Never Mind 740 Yes 741 Never Mind 742 No 743 Yes 744 No 745 Yes 746 No 747 No 748 749 做者: 陈越 750 单位: 浙江大学 751 时间限制: 200 ms 752 内存限制: 64 MB 753 代码长度限制: 16 KB 754 题目详情 755 756 7-27 列出全部祖先结点 (20分) 757 对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的全部祖先结点。 758 输入格式: 759 首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。 760 随后 N 行,每行给出一个对应结点左右孩子的编号。若是某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。 761 最后一行给出一个结点的编号i(0≤i≤N-1)。 762 输出格式: 763 在一行中按规定顺序输出i的全部祖先结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。 764 输入样例: 765 766 7 767 2 - 768 - 6 769 - - 770 0 5 771 - - 772 4 1 773 - - 774 4 775 输出样例: 776 777 3 5 778 779 做者: DS课程组 780 单位: 临沂大学 781 时间限制: 400 ms 782 内存限制: 64 MB 783 代码长度限制: 16 KB 784 题目详情 785 786 7-28 深刻虎穴 (35分) 787 著名的王牌间谍 007 须要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有不少条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有不少条路,一样是每条路通向一扇门…… 他的手里有一张表格,是其余间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。 788 内线告诉他,情报就藏在迷宫的最深处。可是这个迷宫太大了,他须要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。 789 输入格式: 790 输入首先在一行中给出正整数 N(<105),是门的数量。最后 N 行,第 i 行(1≤i≤N)按如下格式描述编号为 i 的那扇门背后能通向的门: 791 792 K D[1] D[2] ... D[K] 793 其中 794 K 795 是通道的数量,其后是每扇门的编号。 796 输出格式: 797 在一行中输出距离入口最远的那扇门的编号。题目保证这样的结果是惟一的。 798 输入样例: 799 800 13 801 3 2 3 4 802 2 5 6 803 1 7 804 1 8 805 1 9 806 0 807 2 11 10 808 1 13 809 0 810 0 811 1 12 812 0 813 0 814 输出样例: 815 816 12 817 818 做者: 陈越 819 单位: 浙江大学 820 时间限制: 400 ms 821 内存限制: 64 MB 822 代码长度限制: 16 KB 823 题目详情 824 825 7-29 城市间紧急救援 (25分) 826 做为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些链接城市的快速道路。每一个城市的救援队数量和每一条链接两个城市的快速道路长度都标在地图上。当其余城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽量多的救援队。 827 输入格式: 828 输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。 829 第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市一、城市二、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解惟一。 830 输出格式: 831 第一行输出最短路径的条数和可以召集的最多的救援队数量。第二行输出从S到D的路径中通过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。 832 输入样例: 833 834 4 5 0 3 835 20 30 40 10 836 0 1 1 837 1 3 2 838 0 3 3 839 0 2 2 840 2 3 2 841 输出样例: 842 843 2 60 844 0 1 3 845 846 做者: 陈越 847 单位: 浙江大学 848 时间限制: 400 ms 849 内存限制: 64 MB 850 代码长度限制: 16 KB 851 题目详情 852 853 7-30 红色警报 (25分) 854 战争中保持各个城市间的连通性很是重要。本题要求你编写一个报警程序,当失去一个城市致使国家被分裂为多个没法连通的区域时,就发出红色警报。注意:若该国原本就不彻底连通,是分裂的k个区域,而失去一个城市并不改变其余城市之间的连通性,则不要发出警报。 855 输入格式: 856 输入在第一行给出两个整数 857 N 858 (0 < 859 N 860 ≤ 500)和 861 M 862 (≤ 5000),分别为城市个数(因而默认城市从0到 863 N 864 -1编号)和链接两城市的通路条数。随后 865 M 866 行,每行给出一条通路所链接的两个城市的编号,其间以1个空格分隔。在城市信息以后给出被攻占的信息,即一个正整数 867 K 868 和随后的 869 K 870 个被攻占的城市的编号。 871 注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。 872 输出格式: 873 对每一个被攻占的城市,若是它会改变整个国家的连通性,则输出 874 Red Alert: City k is lost! 875 ,其中 876 k 877 是该城市的编号;不然只输出 878 City k is lost. 879 便可。若是该国失去了最后一个城市,则增长一行输出 880 Game Over. 881 。 882 输入样例: 883 884 5 4 885 0 1 886 1 3 887 3 0 888 0 4 889 5 890 1 2 0 4 3 891 输出样例: 892 893 City 1 is lost. 894 City 2 is lost. 895 Red Alert: City 0 is lost! 896 City 4 is lost. 897 City 3 is lost. 898 Game Over. 899 900 做者: 陈越 901 单位: 浙江大学 902 时间限制: 400 ms 903 内存限制: 64 MB 904 代码长度限制: 16 KB 905 题目详情 906 907 7-31 拯救007(升级版) (30分) 908 在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑壳跳上岸去!(听说当年替身演员被最后一条鳄鱼咬住了脚,幸亏穿的是特别加厚的靴子才逃过一劫。) 909 设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的最大距离,你须要给他指一条最短的逃生路径 —— 所谓“最短”是指007要跳跃的步数最少。 910 输入格式: 911 首先第一行给出两个正整数:鳄鱼数量 N(≤100)和007一次能跳跃的最大距离 D。随后 N 行,每行给出一条鳄鱼的 (x,y) 坐标。注意:不会有两条鳄鱼待在同一个点上。 912 输出格式: 913 若是007有可能逃脱,首先在第一行输出007须要跳跃的最少步数,而后从第二行起,每行给出从池心岛到岸边每一步要跳到的鳄鱼的坐标 (x,y)。若是没可能逃脱,就在第一行输出 0 做为跳跃步数。若是最短路径不惟一,则输出第一跳最近的那个解,题目保证这样的解是惟一的。 914 输入样例 1: 915 916 17 15 917 10 -21 918 10 21 919 -40 10 920 30 -50 921 20 40 922 35 10 923 0 -10 924 -25 22 925 40 -40 926 -30 30 927 -10 22 928 0 11 929 25 21 930 25 10 931 10 10 932 10 35 933 -30 10 934 输出样例 1: 935 936 4 937 0 11 938 10 21 939 10 35 940 输入样例 2: 941 942 4 13 943 -12 12 944 12 12 945 -12 -12 946 12 -12 947 输出样例 2: 948 949 0 950 951 做者: 陈越 952 单位: 浙江大学 953 时间限制: 400 ms 954 内存限制: 64 MB 955 代码长度限制: 16 KB 956 题目详情 957 958 7-32 直捣黄龙 (30分) 959 本题是一部战争大片 —— 你须要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,因此你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不惟一时,要求选择能够沿途解放最多城镇的路径。若这样的路径也不惟一,则选择能够有效杀伤最多敌军的路径。 960 输入格式: 961 输入第一行给出 2 个正整数 N(2 ≤ N ≤ 200,城镇总数)和 K(城镇间道路条数),以及己方大本营和敌方大本营的代号。随后 N-1 行,每行给出除了己方大本营外的一个城镇的代号和驻守的敌军数量,其间以空格分隔。再后面有 K 行,每行按格式 962 城镇1 城镇2 距离 963 给出两个城镇之间道路的长度。这里设每一个城镇(包括双方大本营)的代号是由 3 个大写英文字母组成的字符串。 964 输出格式: 965 按照题目要求找到最合适的进攻路径(题目保证速度最快、解放最多、杀伤最强的路径是惟一的),并在第一行按照格式 966 己方大本营->城镇1->...->敌方大本营 967 输出。第二行顺序输出最快进攻路径的条数、最短进攻距离、歼敌总数,其间以 1 个空格分隔,行首尾不得有多余空格。 968 输入样例: 969 970 10 12 PAT DBY 971 DBY 100 972 PTA 20 973 PDS 90 974 PMS 40 975 TAP 50 976 ATP 200 977 LNN 80 978 LAO 30 979 LON 70 980 PAT PTA 10 981 PAT PMS 10 982 PAT ATP 20 983 PAT LNN 10 984 LNN LAO 10 985 LAO LON 10 986 LON DBY 10 987 PMS TAP 10 988 TAP DBY 10 989 DBY PDS 10 990 PDS PTA 10 991 DBY ATP 10 992 输出样例: 993 994 PAT->PTA->PDS->DBY 995 3 30 210 996 997 做者: 陈越 998 单位: 浙江大学 999 时间限制: 150 ms 1000 内存限制: 64 MB 1001 代码长度限制: 16 KB 1002 题目详情 1003 1004 7-33 生化危机 (20分) 1005 人类正在经历一场生化危机,许多城市已经被病毒侵袭,这些城市中的人们为了不感染病毒,计划开车逃往其余没有被病毒入侵的城市(安全城市)。有些城市之间有公路直达,有些没有。虽然他们知道哪些城市是安全的,可是不知道有没有一条安全路径可以到达安全城市(只有该路径上通过的全部城市都是安全的,该路径才是安全路径)。请你编写一个程序帮助他们判断。 1006 输入格式: 1007 输入第一行为三个正整数,分别表示全部城市个数m(m<=100)、安全城市个数n(m<=50)、公路个数k(k<=100)。随后一行给出n个安全城市的编号。随后k行,每一行给出两个整数,表示链接一条公路的两个城市编号。最后一行输入两个整数,分别表示当前所在城市s、目标城市d。每行整数之间都用空格分隔。 1008 输出格式: 1009 若目标城市已被病毒入侵(非安全城市),输出"The City i is not safe!";若目标城市为安全城市且从当前所在城市可以通过一条安全路径到达目标城市,输出"The city can arrive safely!";若目标城市为安全城市可是从当前所在城市没有一条安全路径到达目标城市,输出"The city can not arrive safely!",i为目标城市编号。 1010 输入样例1: 1011 1012 5 2 5 1013 3 4 1014 0 1 1015 0 2 1016 0 4 1017 1 2 1018 2 4 1019 0 4 1020 输出样例1: 1021 1022 The city 4 can arrive safely! 1023 输入样例2: 1024 1025 5 2 5 1026 3 4 1027 0 1 1028 0 2 1029 0 4 1030 1 2 1031 2 4 1032 0 3 1033 输出样例2: 1034 1035 The city 3 can not arrive safely! 1036 输入样例3: 1037 1038 5 2 5 1039 3 4 1040 0 1 1041 0 2 1042 0 4 1043 1 2 1044 2 4 1045 0 1 1046 输出样例3: 1047 1048 The city 1 is not safe! 1049 1050 做者: DS课程组 1051 单位: 临沂大学 1052 时间限制: 400 ms 1053 内存限制: 64 MB 1054 代码长度限制: 16 KB 1055 题目详情 1056 1057 7-34 孤岛营救问题 (30分) 1058 1944 年,特种兵麦克接到国防部的命令,要求当即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸亏麦克获得了迷宫的地形图。迷宫的外形是一个长方形, 其南北方向被划分为 n 行,东西方向被划分为 m 列,因而整个迷宫被划分为 n×m 个单元。每个单元的位置可用一个有序数对 (单元的行号, 单元的列号) 来表示。南北或东西方向相邻的 2 个单元之间可能互通,也可能有一扇锁着的门,或者是一堵不可逾越的墙。迷宫中有一些单元存放着钥匙,而且全部的门被分红 p 类, 打开同一类的门的钥匙相同,不一样类门的钥匙不一样。 1059 大兵瑞恩被关押在迷宫的东南角,即 (n,m) 单元里,并已经昏迷。迷宫只有一个入口, 在西北角。也就是说,麦克能够直接进入 (1,1) 单元。另外,麦克从一个单元移动到另外一个 相邻单元的时间为 1,拿取所在单元的钥匙的时间以及用钥匙开门的时间可忽略不计。 1060 试设计一个算法,帮助麦克以最快的方式到达瑞恩所在单元,营救大兵瑞恩。 1061 输入格式: 1062 第一行有三个整数,分别表示n,m,p的值。 1063 第二行是一个整数k,表示迷宫中门和墙的总数。 1064 第 i+2 行 (1≤i≤k),有 5 个整数, 依次为 xi1,yi1,xi2,yi2,gi :当 gi≥1 时,表示 (xi1,yi1) 单元 与 (xi2,yi2) 单元之间有一扇第 gi 类的门,当 gi=0 时, 表 示 (xi1,yi1) 单元与 (xi2,yi2) 单元之间有一堵不可逾越的墙。 1065 第 k+3 行是一个整数 s,表示迷宫中存放的钥匙总数。 1066 第 k+3+j 行 (1≤j≤s) ,有 3 个整数,依次为 xi1,yi1,qi,表示第 j 把钥匙存放在 (xi1,yi1) 单元里,而且第 j 把钥匙是用来开启第 qi 类门。 1067 输入数据中同一行各相邻整数之间用一个空格分隔。 1068 数据保证有 1069 ∣xi1−xi2∣+∣yi1−yi2∣=1,0≤gi≤p 1070 1≤qi≤p 1071 n,m,p≤10,k<150 1072 输出格式: 1073 输出麦克营救到大兵瑞恩的最短期。若是问题无解,则输出 −1。 1074 输入样例: 1075 在这里给出一组输入。例如: 1076 1077 4 4 9 1078 9 1079 1 2 1 3 2 1080 1 2 2 2 0 1081 2 1 2 2 0 1082 2 1 3 1 0 1083 2 3 3 3 0 1084 2 4 3 4 1 1085 3 2 3 3 0 1086 3 3 4 3 0 1087 4 3 4 4 0 1088 2 1089 2 1 2 1090 4 2 1 1091 输出样例: 1092 在这里给出相应的输出。例如: 1093 1094 14 1095 1096 做者: 小黑 1097 单位: 临沂大学 1098 时间限制: 4000 ms 1099 内存限制: 64 MB 1100 代码长度限制: 16 KB 1101 题目详情 1102 1103 7-35 编辑三角形 (30分) 1104 二维平面上有一个三角形,能够经过命令对其进行编辑。 其中命令 translate dx dy 是将三角形平移(dx,dy); 命令 rotate angle 是将三角形绕本身的中心位置(三个顶点的平均位置)旋转angle(角度制); 命令 scale ratio 是将三角形相对于本身的中心位置缩放ratio(例如1.0表示不缩放,2.0表示放大一倍,0.5表示缩小一倍); 命令 undo 是撤销刚才的一个编辑操做。 1105 输入格式: 1106 第一行给出六个实数x0 y0 x1 y1 x2 y2 表示该三角形的三个顶点坐标。第二行给出正整数n (1=< n <=100),表示命令个数,随后n行给出具体的编辑命令。 1107 输出格式: 1108 输出被编辑后的三角形的三个顶点坐标。每一个数之间用一个空格分割,最后一个数后面不要多加空格。全部实数保留3位小数。 1109 样例: 1110 例如输入1: 1111 1112 3.0 3.0 4.0 3.0 3.0 4.0 1113 1 1114 translate 1.5 -1.5 1115 输出: 1116 1117 4.500 1.500 5.500 1.500 4.500 2.500 1118 例如输入2: 1119 1120 3.0 3.0 4.0 3.0 3.0 4.0 1121 1 1122 rotate 90.0 1123 输出: 1124 1125 3.667 3.000 3.667 400 2.667 3.000 1126 例如输入3: 1127 1128 3.0 3.0 4.0 3.0 3.0 4.0 1129 1 1130 scale 0.5 1131 输出: 1132 1133 3.167 3.167 3.667 3.167 3.167 3.667 1134 例如输入4: 1135 1136 3.0 3.0 4.0 3.0 3.0 4.0 1137 4 1138 scale 0.5 1139 undo 1140 rotate 90.0 1141 translate 0.5 0.6 1142 输出: 1143 1144 4.167 3.600 4.167 4.600 3.167 3.600 1145 1146 做者: dingzh 1147 单位: 金陵科技学院 1148 时间限制: 400 ms 1149 内存限制: 64 MB 1150 代码长度限制: 16 KB 1151 题目详情 1152 1153 7-36 角度与多边形 (20分) 1154 给你一个角度 ang. 1155 你可否在一个正 n 边形上找到三个顶点 a,b,c 使得 ∠abc =ang. 1156 1157 若是存在多个这样的正多边形,输出最小的那个。 1158 若是不存在这个多边形,请输出 −1. 1159 输入格式: 1160 第一行包含一个正整数 T(1≤T≤180),表明询问的次数。 1161 接下来 T 行,每行给出一个角度 ang(1≤ang≤180). 1162 输出格式: 1163 在一行里按要求输出对应询问的答案。 1164 输入样例: 1165 1166 1 1167 54 1168 输出样例: 1169 1170 10 1171 样例解释: 1172 样例对应图片上的状况 1173 做者: 小黑 1174 单位: 临沂大学 1175 时间限制: 1000 ms 1176 内存限制: 64 MB 1177 代码长度限制: 16 KB 1178 题目详情 1179 1180 7-37 英文单词排序 (30分) 1181 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。若是长度相同,按照输入的顺序不变。 1182 输入格式: 1183 输入为若干英文单词,每行一个,以 1184 # 1185 做为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。 1186 输出格式: 1187 输出为排序后的结果,每一个单词后面都额外输出一个空格。 1188 输入样例: 1189 1190 blue 1191 red 1192 yellow 1193 green 1194 purple 1195 # 1196 输出样例: 1197 1198 red blue green yellow purple 1199 1200 做者: 张泳 1201 单位: 浙江大学城市学院 1202 时间限制: 400 ms 1203 内存限制: 64 MB 1204 代码长度限制: 16 KB 1205 题目详情 1206 1207 7-38 互评成绩 (30分) 1208 学生互评做业的简单规则是这样定的:每一个人的做业会被 1209 k 1210 个同窗评审,获得 1211 k 1212 个成绩。系统须要去掉一个最高分和一个最低分,将剩下的分数取平均,就获得这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 1213 输入格式: 1214 输入第一行给出3个正整数 1215 N 1216 (3 < 1217 N 1218 ≤104,学生总数)、 1219 k 1220 (3 ≤ 1221 k 1222 ≤ 10,每份做业的评审数)、 1223 M 1224 (≤ 20,须要输出的学生数)。随后 1225 N 1226 行,每行给出一份做业获得的 1227 k 1228 个评审成绩(在区间[0, 100]内),其间以空格分隔。 1229 输出格式: 1230 按非递减顺序输出最后得分最高的 1231 M 1232 个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。 1233 输入样例: 1234 1235 6 5 3 1236 88 90 85 99 60 1237 67 60 80 76 70 1238 90 93 96 99 99 1239 78 65 77 70 72 1240 88 88 88 88 88 1241 55 55 55 55 55 1242 输出样例: 1243 1244 87.667 88.000 96.000 1245 1246 做者: 陈越 1247 单位: 浙江大学 1248 时间限制: 300 ms 1249 内存限制: 64 MB 1250 代码长度限制: 16 KB 1251 题目详情 1252 1253 7-39 租用游艇问题 (20分) 1254 题目来源:王晓东,《算法设计与分析》 1255 长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j<=n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n所需的最少租金。 1256 输入格式: 1257 第1 行中有1 个正整数n(n<=200),表示有n个游艇出租站。接下来的第1到第n-1 行,第i行表示第i站到第i+1站,第i+2站, ... , 第n站的租金。 1258 输出格式: 1259 输出从游艇出租站1 到游艇出租站n所需的最少租金。 1260 输入样例: 1261 在这里给出一组输入。例如: 1262 1263 3 1264 5 15 1265 7 1266 输出样例: 1267 在这里给出相应的输出。例如: 1268 1269 12 1270 1271 做者: 陈晓梅 1272 单位: 广东外语外贸大学 1273 时间限制: 400 ms 1274 内存限制: 64 MB 1275 代码长度限制: 16 KB 1276 题目详情 1277 1278 7-40 修理牧场 (20分) 1279 农夫要修理牧场的一段栅栏,他测量了栅栏,发现须要N块木头,每块木头长度为整数Li个长度单位,因而他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。 1280 可是农夫本身没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为八、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。若是第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。 1281 请编写程序帮助农夫计算将木头锯成N块的最少花费。 1282 输入格式: 1283 输入首先给出正整数N(≤104),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。 1284 输出格式: 1285 输出一个整数,即将木头锯成N块的最少花费。 1286 输入样例: 1287 1288 8 1289 4 5 1 2 1 3 1 1 1290 输出样例: 1291 1292 49 1293 1294 做者: DS课程组 1295 单位: 浙江大学 1296 时间限制: 400 ms 1297 内存限制: 64 MB 1298 代码长度限制: 16 KB 1299 题目详情