中秋欢乐赛-最奇葩Py题解 #创作计划#
2024-09-23 13:34:43
发布于:浙江
ACGO欢乐赛 #28中秋赛 最奇葩非官方Python题解
挑战全部题目一行搞定!
非官方题解,本蒟蒻写着玩的
1.四数最大值
思路
- 输入,split切分转ing,再max求最大值
代码
print(max(map(int, input().split(' '))))
2.数学函数
思路
- 输入操作指令和数字,方法和上面一样
- 根据操作指令进行计算
代码(正常版)
command = input()
if command == "ceil":
print((lambda num: num if num == int(num) else int(num) + 1)(float(input())))
elif command == "floor":
print(int(float(input())))
elif command == "round":
print(int(float(input()) + 0.5))
代码(奇葩版)
print((lambda command: (lambda num: num if num == int(num) else int(num) + 1)(float(input())) if command == "ceil" else (lambda text: int(float(input()))if command == "floor" else int(float(input()) + 0.5))(command))(input()))
3.支付失败
思路
- 输入各种数
- 求和,判断是否大于等于手头的钱
代码
print("YES" if list(map(int, input().split()))[1] >= sum(list(map(int, input().split()))) else "NO")
4.任务-宝石
思路
- 首先题目要求我们每个人分到的金额各不相同且是整数,那么就类似1 2 3 4 5 ... n 这种数列
- 输入n,然后根据上面的规则,求出数列,在求和
代码
print(sum(range(1, int(input()) + 1)))
5.艾丽娅的任务
思路
- 输入n,题目要求我们求出类似这样的数列:1+(1+2)+(1+2+3)+(1+2+3+4)+⋯+(1+2+3+4+5+⋯+n)
- 两层循环嵌套,用等差数列的求和公式求和出里面一层的,再把上一步求和的全部加起来,最后输出即可
代码
print(sum(map(lambda x: x*(x+1)//2, range(1, int(input())+1))))
6.最大硬盘
思路
- 先全输进来
- 然后全部转成统一的单位
- 然后求出最大的那个
代码(展开版)
print(
max(
list(
map(
lambda x:
(
' '.join(x),
int(x[0]) * {
"B": 1,
"KB": 1000,
"MB": 1000 ** 2,
"GB": 1000 ** 3
}[x[1]]
),
(
input().split() for _ in range(int(input()))))
),
key=lambda x: x[1]
)[0]
)
代码(压缩版)
print(max(list(map(lambda x: (' '.join(x), int(x[0]) * {"B": 1, "KB": 1000, "MB": 1000 ** 2, "GB": 1000 ** 3}[x[1]]),(input().split() for _ in range(int(input()))))), key=lambda x: x[1])[0])
7.找到acgo
思路
- 比赛的时候写着写着突然想到一个奇葩的思路——用正则表达式(
re
)来匹配
代码
print("YES" if __import__("re").search(r"a.*c.*g.*o", input()) else "NO")
8.丢失的数据
思路
- 把全部的数输入先
- 剔除大于k或者小于1的数以及重复的数
- 剩下的数求和,用1-k的数求和的值去减前面的值,得到丢失的数的和
代码(展开版)
print(
(
lambda k:
(
k*(k+1)//2
) - sum(
set(
[_ for _ in map(
lambda x: int(x)
if k >= int(x) > 0 else None, input().split()
) if _ is not None]
)
)
)(
list(
map(int, input().split())
)[1]
)
)
代码(压缩版)
print((lambda k: (k*(k+1)//2) - sum(set([_ for _ in map(lambda x: int(x) if k >= int(x) > 0 else None, input().split()) if _ is not None])))(list(map(int, input().split()))[1]))
今天的奇葩题解就到这吧(
全部评论 6
置顶贺
2024-09-20 来自 上海
0我C我就说T6代码老改不对(用1024),我以为他跟我讲那么详细原来的二进制怎么弄十进制又是怎么奸商还以为会有个1或0给我标注一下是二进制还是十进制,发现没有索性用二进制,还甜美以为自己怪聪明,结果连测试二都跑不了,甜美的怎么就不告诉一声统一是用1024还是1000
2024-09-20 来自 江苏
0题目描述里有,我一开始也做错了,那一大堆字根本懒得看,卡了我5分钟才看到是用1000而不是1024(建议下次写的显眼一点)
2024-09-21 来自 浙江
0我卡到现在才知道用1000不是1024,还以为多难呢
2024-09-21 来自 江苏
0
qp
2024-09-16 来自 上海
0前排
2024-09-16 来自 上海
0
qpqp
2024-09-16 来自 上海
0__import__("re").search()
,库还能这么调用,学费了()2024-09-16 来自 上海
0python小寄巧
2024-09-16 来自 浙江
0
qp大佬
2024-09-16 来自 上海
0qp……是啥玩意
恕我学识尚浅2024-09-16 来自 浙江
0洛谷的梗
2024-09-16 来自 上海
0讲讲
2024-09-16 来自 浙江
0
顶
2024-09-16 来自 浙江
0顶
2024-09-16 来自 浙江
0
有帮助,赞一个