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项物品,大小分别为s1、s2、…、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≤10000<v1,v2,...,vn≤100000<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
 6662 667 N
 668104),随后
 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行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过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
 8580 < 
 859 N
 860500)和
 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 输出麦克营救到大兵瑞恩的最短时间。如果问题无解,则输出 −11074 输入样例:
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
12163 < 
1217 N
1218104,学生总数)、
1219 k
122031221 k
122210,每份作业的评审数)、
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的木头锯成长度为8、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 题目详情
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄