1. 传球
(ball.pas/c/cpp)
【问题描述】
CCC的足球比赛和传统的足球比赛有一点不同, 一次进球当且仅当先后接触到球的4名队员的球衣编号是升序排列的。
球员的球衣编号从过1到1500,并且每个人的编号都不同。
给出最后得分球员的球衣编号,请计算出有多少合法的球员组合能够产生这一进球。
【输入格式】
输入一个整数N(1≤N≤1500),代表进球球员的球衣编号。
【输出格式】
输出只有一行,包含一个整数代表有多少种组合能够使得最后进球的球员编号为N。
【样例】
|
ball.in |
ball.out |
|
2 |
0 |
|
5 |
4 |
【限制】
时限:1s
内存限制:128MB
2. 矩阵交换
(matrix.pas/c/cpp)
【问题描述】
给定一个N*N的矩阵,要求支持3种操作:
R a b:交换第a行和第b行的所有元素;
C a b:交换第a列和第b列的所有元素;
A a b:询问第a行第b列元素的值。
【输入格式】
第一行两个整数N,K,表示矩阵大小和操作个数;
接下来N行,每行N个整数,表示初始的矩阵。
接下来K行每行一个操作,格式如题目所述。
【输出格式】
对于每个询问,输出一行作为答案。
【样例】
|
matrix.in |
matrix.out |
|
3 5 1 2 3 4 5 6 7 8 9 A 3 2 R 3 2 C 2 3 A 2 2 A 3 2 |
8 9 6 |
【数据范围】
对于30%数据满足:1≤N≤100,1≤K≤20000;
对于100%数据满足:1≤N≤700,1≤K≤100000,0≤初始矩阵中的所有数值≤109。
【限制】
时限:1s
内存限制:128MB
3. 砍树
(cut.pas/c/cpp)
【问题描述】
Smart在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一棵长度为a[i]的竖线段。由于有的树过于高大,挡住了其它的树,使得另一些树得不到阳光。如果有两棵树i、j,i的顶端与j的底端连线的倾角大于45度,我们就定义为树i挡住了树j。现在Smart希望将一些树砍低,使得不存在挡住的情况。他想知道总共最少需要砍掉多少长度,请你来帮他计算一下。
注意:如果同一位置有两棵树的话,根据题意,我们只能将这两棵都砍成高度为0才能保证它们不相互挡住,但是高度为0并不代表这棵树不存在。
【输入格式】
第一行一个整数,表示有n棵树。
接下来n行,每行两个正整数p[i]和a[i],表示一棵树的位置和高度。
【输出格式】
输出一个数,表示最少砍断多少长度。
【样例】
|
cut.in |
cut.out |
|
3 0 2 3 3 1 2 |
3 |
【数据范围】
对于50%的数据满足:n≤100;
对于100%的数据满足:n≤100000,0<p[i],a[i]≤10000。
【限制】
时限:1s
内存限制:128MB
4. 括号序列
(sqrbr.pas/c/cpp)
【问题描述】
对长度为2*N (N≤20)的括号序列,规定某些位置必须是左括号,试统计合法序列数目。
例如:下面两种括号序列是合法的:
[[]][[[]][]]
[[[][]]][][[]]
下面的这种括号序列就是不合法的:
[[[][]]][]][[]]
【输入格式】
第一行两个整数N和K,表示要构造一个长度为2*N的括号序列,K表示规定有K个位置必须是左括号;
第二行有K个整数,表示规定为左括号的K个位置。
【输出格式】
一个整数,即满足要求的合法括号序列数目。
【样例】
|
sqrbr.in |
sqrbr.out |
|
3 1 2 |
3 |
【限制】
时限:1s
内存限制:128MB

2万+

被折叠的 条评论
为什么被折叠?



