【题解】跳格子
【题目描述】
地面上有一排长度为n的格子1-n,每个格子上都有一个数xi,开始时你在位置0,每次你可以向前跳1-2格,然后取走格子上的数,直到跳到位置n+1。取走的数的和就是你的得分,现在你想知道你可能的最大得分是多少。
【输入描述】
【输出描述】
【样例输入】
3 1 1 1
【样例输出】
-9993
【题目描述】
地面上有一排长度为n的格子1-n,每个格子上都有一个数xi,开始时你在位置0,每次你可以向前跳1-2格,然后取走格子上的数,直到跳到位置n+1。取走的数的和就是你的得分,现在你想知道你可能的最大得分是多少。
【输入描述】
【输出描述】
【样例输入】
3 1 1 1
【样例输出】
-9993
【题目描述】
求一个数列的所有前缀最大值之和。
即:给出长度为n的数列a[i],求出对于所有1<=i<=n,max(a[1],a[2],...,a[i])的和。
比如,有数列:666 304 692 188 596,前缀最大值为:666 666 692 692 692,和为3408。
对于每个位置的前缀最大值解释如下:对于第1个数666,只有一个数,一定最大;对于第2个数,求出前两个数的最大数,还是666;对于第3个数,求出前3个数的最大数是692……其余位置依次类推,最后求前缀最大值得和。
由于读入较大,数列由随机种子生成。
其中a[1]=x,a[i]=(379*a[i-1]+131)%997。
【输入描述】
一行两个正整数n,x,分别表示数列的长度和随机种子。(n<=100000,x<997)
【输出描述】
一行一个正整数表示该数列的前缀最大值之和。
【样例输入】
5 666 Copy
【样例输出】
3408
【提示】
数列为{666,304,692,188,596},前缀最大值为{666,666,692,692,692},和为3408。
【题目描述】
求一个数列的所有前缀最小值之和。
即:给出长度为n的数列a[i],求出对于所有1<=i<=n,min(a[1],a[2],...,a[i])的和。
由于读入较大,数列由随机种子生成。
其中a[1]=x,a[i]=(379*a[i-1]+131)%997。
【输入描述】
一行两个正整数n,x,分别表示数列的长度和随机种子。(n<=100000,x<997)
【输出描述】
一行一个正整数表示该数列的前缀最小值之和。
【样例输入】
5 666
【样例输出】
1650
【提示】
数列为{666,304,692,188,596},前缀最小值为{666,304,304,188,188},和为1650。
前缀最小:
比如,有数列:666 304 692 188 596,前缀最大值为:666,304,304,188,188,和为1650。
对于每个位置的前缀最小值解释如下:对于第1个数666,只有一个数,一定最大;对于第2个数,求出前两个数的最小数,还是304;对于第3个数,求出前3个数的最小数是304……其余位置依次类推,最后求前缀最小值得和。
【题目描述】
NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为w,即当前排名前 w 的选手的最低成绩就是即时的分数线。
,其中 是获奖百分比, 表示对 向下取整, 表示 x 和y 中较大的数。如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多。
作为评测组的技术人员,请你帮 CCF 写一个直播程序。
【输入描述】
第一行有两个整数 n。分别代表选手总数与获奖率。
第二行有 个整数,依次代表逐一评出的选手成绩。
【输出描述】
只有一行,包含 n 个非负整数,依次代表选手成绩逐一评出后,即时的获奖分数线。相邻两个整数间用一个空格分隔。
【样例输入】
10 60 200 300 400 500 600 600 0 300 200 100
【样例输出】
200 300 400 400 400 500 400 400 300 300
【提示】
样例 1 解释:
| 已评测选手人数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 计划获奖人数 | 1 | 1 | 1 | 2 | 3 | 3 | 4 | 4 | 5 | 6 |
| 已评测选手的分 数从高到低排列 (其中,分数线 用粗体标出) | 200 | 300 200 | 400 300 200 | 500 400 300 200 | 600 500 400 300 200 | 600 600 500 400 300 200 | 600 600 500 400 300 200 0 | 600 600 500 400 300 300 200 0 | 600 600 500 400 300 300 200 200 0 | 600 600 500 400 300 300 200 200 100 0 |
注意,在第9名选手的成绩评出之后,计划获奖人数为5人,但由于有并列,实际会有6人获奖。
输入样例2:
10 30 100 100 600 100 100 100 100 100 100 100
输出样例2:
100 100 600 600 600 600 100 100 100 100
【数据规模与约定】:
各测试点的n 如下表:
| 测试点编号 | |
| 1∼3 | 10 |
| 4∼6 | 500 |
| 7∼10 | 2000 |
| 11∼17 | |
| 18∼20 |
【提示】
在计算计划获奖人数时,如用浮点类型的变量(如 C/C++ 中的 float 、 double,Pascal 中的 real 、 double 、 extended 等)存储获奖比例w,则计算5 时的结果可能为,也可能为 ,向下取整后的结果不确定。因此,建议仅使用整型变量,以计算出准确值。
【题目分析】
排序题,最简单的思路是每次新加一个人,然后就sort一遍,但是这样做肯定会超时的(n=100000)。
其实,从题目中给的测试数据可以发现,每个选手的成绩并不大,不超过600。那么比较好的做法就是用桶排了。
【题目描述】
一个5*5的矩阵,矩阵内用0,1显示。其中,0是路,表示这个点可以走,1是墙表示这个点不可以走。
问,从给定的矩阵中从左上角到右下角最少需要走多少步?
注:题目保证有解(不存在左上角和右下角为1的情况)
【输入描述】
一个5*5的矩阵
【输出描述】
一行,表示最少要走多少步?
【样例输入】
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
【样例输出】
8
【题目描述】
给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。
最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。
请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。
数据保证 (1,1)处和 (n,m)处的数字为 0,且一定至少存在一条通路
【输入描述】
第一行包含两个整数 n 和 m。
接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
【输出描述】
输出一个整数,表示从左上角移动至右下角的最少移动次数。
【样例输入】
5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
【样例输出】
8
【数据范围】
1≤n,m≤100
【题目描述】
有一实数序列A[1]、A[2] 、A[3] 、……A[n-1] 、A[n] (n<10000),若i<j,并且A[i]>A[j],则称A[i]与A[j]构成了一个逆序对,求数列A中逆序对的个数。
例如,5 2 4 6 2 3 2 6,可以组成的逆序对有
(5 2),(5 4),(5 2),(5 3),(5 2),
(4 2),(4 3),(4 2),
(6 2),(6 3),(6 2),
(3 2)
共:12个
【输入描述】
共两行,第一行有一个正整数n,第二行有n个整数。
【输出描述】
只有一行为逆序对个数。
【样例输入】
8 5 2 4 6 2 3 2 6
【样例输出】
12
【题目描述】
Prince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求助于你,帮助他完成这个梦想。
一串数列即表示一个世界的状态。
平衡是指这串数列以升序排列。而从一串无序数列到有序数列需要通过交换数列中的元素来实现。KB的能量只能交换相邻两个数字。他想知道他最少需要交换几次就能使数列有序。
【输入描述】
第一行为数列中数的个数n,第二行为n ≤ 10000个数。表示当前数列的状态。
【输出描述】
输出一个整数,表示最少需要交换几次能达到平衡状态。
【样例输入】
4 2 1 4 3
【样例输出】
2
【题目描述】
有2n个棋子(n≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为n=5的情形:○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。
如n=5时,成为:○●○●○●○●○●
任务:编程打印出移动过程。
【输入描述】
输入n。
【输出描述】
移动过程。
【样例输入】
7
【样例输出】
step 0:ooooooo*******-- step 1:oooooo--******o* step 2:oooooo******--o* step 3:ooooo--*****o*o* step 4:ooooo*****--o*o* step 5:oooo--****o*o*o* step 6:oooo****--o*o*o* step 7:ooo--***o*o*o*o* step 8:ooo*o**--*o*o*o* step 9:o--*o**oo*o*o*o* step10:o*o*o*--o*o*o*o* step11:--o*o*o*o*o*o*o*
【题目描述】
设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。
【输入描述】
输入:M。
【输出描述】
输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。
【样例输入】
3
【样例输出】
1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1