第一题 卫星发射
试题名称:卫星发射
时间限制: 1.0s
内存限制: 128.0MB
【问题描述】
在 2050 年卫星发射技术已经得到极大发展,我国将援助 A 国建立远轨道卫星导航系统,该项目计划第一个天发射一颗卫星;之后两天(第二天和第三天),每天发射两颗卫星;之后三天(第四、五、六天),每天发射三颗卫星;之后四天(第七、八、九、十天),每天发射四颗卫星......;这种卫星发射模式会一直延续到项目完成:当连续 n 天每天发射 n 颗卫星后,航天局在之后的连续 n+1 天里,每天发射 n+1 颗卫星。
请计算在前 k 天里,一共发射了多少卫星。
【输入描述】
一个正整数 k,表示发射卫星的天数。
【输出描述】
一个正整数,即发射卫星的总数。
【输入样例】
6
【输出样例】
14
【样例 1 说明】
航天局第一天发射一颗卫星;第二天和第三天,每天发射两颗卫星;第四、五、六天,每天发射三颗卫星。因此一共发射 1+2+2+3+3+3=14 颗卫星。
【数据规模】
对于 100%的数据, 1≤k≤10^4。
python
k=int(input())
n=1
wx=0
while n<=k:
wx+=n*n
k-=n
n+=1
if k!=0:
wx+=n*k
print(wx)
第二题 伯罗奔尼撒箭阵
试题名称:伯罗奔尼撒箭阵
时间限制: 1.0s
内存限制: 128.0MB
【问题描述】
在伯罗奔尼撒战争中,为了应对敌方的箭阵,指挥官正在研究一种新的列队方式,为了方便士兵理解,抽象如下:给出正整数 n,要求按如下方式构造数列:
- 只有一个数字 n 的数列是一个合法的数列。
- 在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列。
请你帮助指挥官求出,一共有多少个合法的数列。两个合法数列 a, b 不同当且仅当两数列长度不同或
存在一个正整数 i≤∣a∣,使得 ai ≠bi。
【输入描述】
输入只有一行一个整数,表示 n。
【输出描述】
输出一行一个整数,表示合法的数列个数。
【输入样例】
6
【输出样例】
6
样例 1 解释
满足条件的数列为:
6
6,1
6,2
6,3
6,2,1
6,3,1
【数据规模】
数据保证,对于全部的测试点,保证 1≤n≤10^3。
python
def f(n):
global count
b=n//2
count+=b
for i in range(2,b+1):
f(i)
count=1
n=int(input())
f(n)
print(count)
第三题 天空之城的树
试题名称:天空之城的树
时间限制: 1.0s
内存限制: 128.0MB
【问题描述】
拉姆达人在修建天空之城时,主要是依赖巨大的飞行石去维持悬空状态,依赖强壮的大树去作为建筑物的框架,假设大树是一棵有 n(n≤10^3)个结点的二叉树。给出每个结点的两个子结点编号(均不超过 n),建立一棵二叉树(根节点的编号为 1),如果是叶子结点,则输入 0 0。
建好这棵二叉树之后,请帮拉姆达设计师求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
【输入描述】
第一行一个整数 n,表示结点数。
之后 n 行,第 i 行两个整数 l、r,分别表示结点 i 的左右子结点编号。若 l=0 则表示无左子结点,r=0 同理。
【输出描述】
一个整数,表示最大结点深度。
【输入样例】
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
【输出样例】
4
【数据规模】
数据保证,对于全部的测试点,保证 1≤n≤10^3。
python
"""
解题思路:
数据范围在10^3之内,可以使用深度优先搜索计算结果
使用两个数组分别记录左右子树情况
分别搜索左右子树,不断寻找最大深度
注意输入的数据需要按空格拆分
"""
depth=0
def dfs(node,dep):
if node==0:
return
global depth
depth=max(depth,dep)
dfs(lst_l[node-1],dep+1)
dfs(lst_r[node-1],dep+1)
n=int(input())
lst=[list(map(int,input().split()))for _ in range(n)]
lst_l=[i[0] for i in lst]
lst_r=[i[1] for i in lst]
dfs(1,1)
print(depth)
第四题 最后的王者
试题名称:最后的王者
时间限制: 1.0s
内存限制: 128.0MB
【问题描述】
学校的编程兴趣班提出了一个有趣的问题:假设键盘输入一个高精度的正整数 n(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n 和 k,寻找一种方案使得剩下的数字组成的新数最小。试着帮他们给出解决方案。
【输入描述】
输入两行正整数。
第一行输入一个高精度的正整数 n。
第二行输入一个正整数 k,表示需要删除的数字个数。
【输出描述】
输出一个整数,最后剩下的最小数。
【输入样例】
175438
4
【输出样例】
13
python
s=input()
l=len(s)
s=s+"0"
k=int(input())
need=l-k
while k>0:
for i in range(l):
if s[i]>s[i+1]:
s = s[:i]+ s[i+1:]
#print(s)
break
l=l-1
k=k-1
print(int(s[:need]))
第五题 矩阵取数
试题名称:矩阵取数
时间限制: 1.0s
内存限制: 128.0MB
【问题描述】
淘淘设计了一个矩阵取数游戏:对于一个给定的 n×m 的矩阵,矩阵中的每个元素 ai,j 均为非负整数。游戏规则如下:
- 每次取数时须从每行各取走一个元素,共 n 个。经过 m 次后取完矩阵内所有元素;
- 每次取走的各个元素只能是该元素所在行的行首或行尾;
- 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 ×2^i,其中 i 表示第 i 次取数(从 1 开始编号);
- 游戏结束总得分为 m 次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。
【输入描述】
输入文件包括 n+1 行:
第一行为两个用空格隔开的整数 n 和 m。
第 2∼n+1 行为 n×m 矩阵,其中每行有 m 个用单个空格隔开的非负整数。
【输出描述】
输出文件仅包含 1 行,为一个整数,即输入矩阵取数后的最大得分。
【输入样例】
2 3
1 2 3
3 4 2
【输出样例】
82
【数据规模】
对于 60% 的数据,满足 1≤n,m≤30,答案不超过 10^16。
对于 100% 的数据,满足 1≤n,m≤80,0≤ai,j≤1000。
python
def getSum(lst,c=1):
global s
if not lst:
return s
if lst[0]<lst[-1]:
s+=lst.pop(0)*(2**c)
else:
s+=lst.pop(-1)*(2**c)
return getSum(lst,c+1)
n,m=map(int,input().split())
bs=0
for i in range(n):
s=0
lst=list(map(int,input().split()))
bs+=getSum(lst)
print(bs)