Python代码!!!
5395 传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5395
5398传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5398
5395:大于中值的边界元素
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
描述
给定一个二维数组,求二维数组的边界元素中,大于二维数组“中值”的元素个数。这里的“中值”定义为一个元素序列中:
(1)当元素个数为奇数时,即为中间大的元素;
(2)当元素个数为偶数时,为中间大的两个元素的平均值。
输入
第一行为两个元素n和m,表示二维数组的行数和列数。
接下来又n行,每行m个整数,表示数组元素值。
1<=n,m<=100。
输出
输出大于中值的元素个数。
样例输入
3 3
1 2 3
2 3 1
4 1 5
样例输出
3
提示
中值为2,因此边界元素中大于2的元素个数为3个。
思路:
因为题目要求中位数,所以不知道整个数组是奇数个还是偶数个的情况下,还是直接把数组元素都用float存储比较好。
然后就是存的时候可以浪费一下空间,存一个二维数组,另外再把所有元素存到一个一维数组,这样找中位数方便一点。
然后比较就是比较四个边上的元素和中位数比较。easy!
if __name__ == "__main__":
n ,m = map(int,input().split())
a,b,sum = [[0 for i in range(m)]for j in range(n)],[],0
for i in range(n):
a[i] = input().split()
for j in range(m):
a[i][j] = float(a[i][j])
b.append(a[i][j])
b.sort()
num = float(b[len(b)//2]) if len(b)%2==1 else (b[len(b)//2+1]+b[len(b)//2])/2
for i in range(n):
for j in range(m):
if i == 0 or j == 0 or i == n-1 or j == m - 1:
if a[i][j] > num: sum += 1
print(sum)
TOJ5398: 签到大富翁
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
台州移动有一个活动叫做“签到大富翁”,用户签到后可以得到“掷骰子”的机会,根据用户掷骰子的点数,可以到达某个方格,从而获得相应的奖励。但有些格子可能会倒退或前进一步,最终到达了另一个格子。现在请你根据掷骰子的点数确定能获什么奖励。
为简化起见,这里只需要输出对应格子的数字即可(具体实现这个游戏时,你可以根据该数字确定奖品类型)。
输入
输入数据的第一行为整数n(n<=50),表示地图中的格子数目。
第二行为n个整数,表示格子中的数字值,如果为-1,表示后退一步,如果为1表示前进一步,其他数字对应奖品或无奖品,每次掷骰子最多只能前进或倒退一次。
第三行为整数m(m<=10),表示玩家可以掷骰子的次数。
第四行为m个整数,表示玩家分别掷出的骰子点数(1~6之间)。
玩家总是从第一个格子出发,当到达终点时(掷骰子点数超出终点也将停留在终点),下一次掷骰子将重新从起点出发。
输出
输出每次掷骰子所到达格子的对应数字值,每行一个。
样例输入
10
0 1 2 -1 3 4 2 1 5 0
3
3 2 5
样例输出
2
3
0
思路:直接模拟就好了,注意一下,进一步和退一步,只能执行一次!
7
0 5 4 1 -1 1 0
3
5 4 3
输出:
0
1
0
代码:
if __name__ == "__main__":
n,str= input(),input()
a = [int(i) for i in str.split()]
n,str= input(),input()
b = [int(i) for i in str.split()]
ard ,f=0,0
for i in range(len(b)):
ard += b[i]
if ard >= (len(a)-1): f,ard = 1,len(a)-1
if a[ard] == 1:ard+=1
elif a[ard] == -1:ard-=1
if ard >= (len(a)-1): f,ard = 1,len(a)-1
print(a[ard])
if f == 1:ard,f=0,0