题解系列011 + 比赛系列001 | CSDN 第四届编程竞赛题解 + 建议

题目分析

第一题

在这里插入图片描述
本题考察的是条件分支if else 语句的应用,分别根据条件枚举三种计算即可。

class Solution:
	def __init__(self) -> None:
		pass	
	def solution(self, amount):
		result = None
		if amount<=150:
			result = amount * 0.4463
		elif amount>=151 and amount <=400:
			result = 150*0.4463+(amount-150)*0.4663
		elif amount >=401:
			result = 150*0.4463+250*0.4663+(amount-400)*0.5663
		result = round(result, 1)
		return result
if __name__ == "__main__":
	amount = int(input().strip())
	s = Solution()
	result = s.solution(amount)
	print(result)

第二题

在这里插入图片描述
本题考察的是字符串的处理问题,因此存在多种解答。笔者就看到了用 Javascript 一行解决的方法,还有用 C++ 模板类的做法,当然直接暴力也不难:

import string
class Solution:
	def __init__(self) -> None:
		pass
	def solution(self, str):
		result = ''
		spaces = [-1]
		strips=[]
		for i in range(len(str)):
			if str[i]==' ':
				spaces.append(i)
		final = len(str)
		spaces.append(final)
		for i in range(len(spaces)-1):
			strips.append(str[(spaces[i]+1):(spaces[i+1])])
		for i in range(len(strips)-1, -1, -1):
			result=result + strips[i]
		if i != -1:
			result = result+' '
		return result
if __name__ == "__main__":
	str = input().strip()
	s = Solution()
	result = s.solution(str)
	print(result)

第三题

在这里插入图片描述
本题考察的是动态规划,也可以直接开二维数组解决,具体可以参考这篇文章,我的实现如下:

def get_ans(n,k):
	if k==1 or n==k:
		return 1
	elif n<k:
		return 0
	else:
		return (get_ans(n-1,k-1) + get_ans(n-k, k))
if __name__ == "__main__":
	modd = 1000000007
	n,k = map(int, input().split())
	result = (get_ans(n,k) % modd)
	print(result)

第四题

在这里插入图片描述
本题的题意比较模糊,笔者 10 个点过了 2 个点,当时的解决方案如下:

def solution(n, arr):
	result = None
	newarr=[]
	for i in range(n):
		newarr.append(arr[i]-min(i,n-1-i))
	cnt = 0
	for i in range(n):
		cnt = max(cnt, newarr.count(newarr[i]))
	result = n-cnt
	return result
if __name__ == "__main__":
	n = int(input().strip())
	arr = [int(item) for item in input().strip().split()]
	result =solution(n, arr)
	print(result)

最终结果: 25 + 25 + 25 + 5 = 80 , rank = 5 25+25+25+5=80, \text{rank}=5 25+25+25+5=80,rank=5

建议

  1. 本次比赛的编辑器并不是非常友好,例如调试中注释的快捷键 Ctrl + / 就无法使用,因此笔者在考试时实际使用了 jupyter notebook 编辑器并复制进去(20 次的复制和切屏限制应该还算合理)
  2. 必须要 10 秒才能调试一次这个限制或许是因为评测机性能的问题,防止恶意提交,但这个限制也在比赛过程中比较浪费时间。
  3. 一开始题意叙述不清,并且第三题的数据甚至出现了问题,使人感觉审核环节仿佛形同虚设。
  4. 最后希望官方能够在比赛结束后迅速给出题解,以供学习,这样才能完全达到比赛的最好效果

当然,举办这样一场比赛也是十分不容易的,希望以后 CSDN 的编程竞赛能够越办越好!


欢迎关注我的博客!
我的 GitHub 账号: 欢迎 Fork + PR!
我的洛谷账号:这是我
我的洛谷团队:这是我的团队
欢迎大家关注我,在项目上与我协作哦!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值