CSDN 周赛 58 期
- 前言
- 1、题目名称:打家劫舍
- 2、题目名称:小Q的鲜榨柠檬汁
- 3、题目名称:收件邮箱
- 4、题目名称:莫名其妙的键盘
- 后记
前言
很多人都知道,CSDN 周赛的题目出自每日一练,甚至连用例都不会变动,所以,基本上刷过每日一练的小伙伴,做这些已经做过的,没有复杂逻辑的题目,其实都很快的,老顾这样的手慢的人,都能在15分钟内完成AC,不明白为什么会有小伙伴觉得8分钟是复制粘贴方式。
嗯,这个 bug 提交帖子的回复,老顾说大话了,老顾自己把代码复制出来,用字符统计方式计算了一下,连回车换行一共471个字符。
说实话,今天的四个题目实在是入门级的简单,只要刷过相应题目,基本上是不用费脑子的,直接按照代码习惯敲出来就可以了。
像我这样,没有切出去,没有复制粘贴次数的,难道能算作弊么?
老顾都已经在个人社区里,发了一个每日一练的速查帖子了,可以方便的进入老顾已知的所有题目里进行刷题联系了,也提供了一些老顾自己的解答方式了,难道还有小伙伴觉得,10分钟内是作弊么?不能是非常熟悉这些题目么?
速查贴入口:https://bbs.csdn.net/topics/615835833,真是觉得莫名其妙。
CSDN 文盲老顾的博客,https://blog.csdn.net/superwfei
1、题目名称:打家劫舍
一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
老顾社区相关帖子:https://bbs.csdn.net/topics/615397008
这个题目没什么好说的,帖子里有两种老顾自己写的,也有其他小伙伴的建议和思路。以下是考试时代码,与帖子内容完全一致,这是代码风格的问题,个人习惯这么写了啊,亲。
n = int(input())
arr = list(map(int,input().split()))
dp = [0] * n
dp[0] = arr[0]
if n > 1:
dp[1] = max(arr[:2])
for i in range(2,n):
dp[i] = max(dp[i - 1],dp[i - 2] + arr[i])
print(dp[-1])
来一版瘦身版的
n=int(input())
a=list(map(int,input().split()))
d=[a[0]]*n
if n>1:
d[1]=max(a[:2])
for i in range(2,n):
d[i]=max(d[i-1],d[i-2]+a[i])
print(d[-1])
2、题目名称:小Q的鲜榨柠檬汁
团建活动是大家所想要的。 小Q给大家准备了鲜橙汁。 现在有n个朋友买回了k瓶饮料,每瓶有l毫升的饮料,同时还买回了c个柠檬, 每个柠檬可以切成d片,p克盐。 已知每个朋友需要nl毫升的饮料,一片柠檬,以及np克盐。 小Q想知道每个朋友最少可以喝多少杯饮料。
老顾社区相关帖子:https://bbs.csdn.net/topics/615372451
这个题目实在无力吐槽了,变量一堆看着很复杂,其实运算贼拉简单。帖子内的代码,老顾实在无力精简了,什么时候写也都是这样了。。。。
n,k,l,c,d,p,nl,np = map(int,input().split())
print(min([k*l//n//nl,c*d//n,p//np//n]))
3、题目名称:收件邮箱
已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
老顾社区相关帖子:https://bbs.csdn.net/topics/614814663
这个帖子里的代码,都比我今天提交的考试代码精简了。。。
import re
print(re.sub(r'(?<!^)dot(?!$)','.',re.sub(r'(?<!^)at(?!$)','@',input(),1)))
以下是58期当期提交的代码:
import re
s = input()
s = re.sub(r'(?<!^)at','@',s,1)
s = re.sub(r'(?<!^)dot(?!$)','.',s)
print(s)
嗯,用正则答题的小伙伴估计不多,应该无法举报我抄袭吧?
4、题目名称:莫名其妙的键盘
有一个神奇的键盘,你可以用它输入a到z的字符,然而每当你输入一个元音字母(a,e,i,o,u其中之一)的时候,已输入的字符串会发生一次反转! 比方说,当前输入了tw,此时再输入一个o,此时屏幕上的字符串two会反转成owt。 现给出一个字符串,若用该键盘输入,有多少种方法可以得到?
老顾社区相关帖子:https://bbs.csdn.net/topics/615669678
这个题目如果完全没做过,可能还有点思考的时间需求,已经刷过题的,这个题目真就一言难尽啊。
import re
s = input()
n = len(s)
ans = 0
while len(s) > 0:
if s[0] in 'aeiou':
ans = 0
s = s[1:][::-1]
else:
if re.fullmatch(r'[^aeiou]+[aeiou]',s):
ans = -1
break
ans += 1
s = s[1:]
print(ans + 1)
考试提交的这个代码,也和帖子里的不是完全一致。然后帖子里,老顾又给了一个更精简代码的版本,就是在58考试后的时候。嗯,因为对正则比较熟,所以也用到正则了。下边这个就是帖子里,老顾用正则写的更精简的版本。
import re
s,a=input(),0
while len(s)>0 and s[0] in 'aeiou':
a=len(s)
s=re.sub('^[aeiou]|[^aeiou]+$','',s)[::-1]
print(0 if s else a)
后记
说实话,csdn 的周赛,考的并不是算法,目前一共156个每日一练的题目,真正考算法的题目,需要数学公式的不超过10个,用暴力方式解答,有超时风险,需要优化逻辑的,不超过20个,用例存在问题,无法AC,或者说暂时不知道如何 AC 的题目,也有10来个。所以,多刷每日一练的题目,对周赛帮助是很大的,别说8分钟AC,就今天这四个题目,就算有人5分钟内AC,老顾都不会觉得奇怪。
老顾在之前几次周赛的博客里已经提到过了,老顾在个人社区列出了老顾的每日一练的答案了,有心的小伙伴们应该已经参考过相关内容了。
而每日一练速查这个帖子,则是最近才发出来的,统计了老顾已知的所有每日一练题目的入口,以及附上了老顾自己的答案(有些题目则在帖子内说明,是参考哪位小伙伴的内容了),速查贴入口在前言部分也已经放出来了,真想在周赛取得好成绩,还是要多看一看的,毕竟 CSDN 每日一练更多的是阅读理解。。。。。很多算法以外的意外情况较多,猛一看题目,其实会有犯晕的情况的。熟悉下题目,做上两边,其实就不会有这些问题了。
当然,各位小伙伴也可以参考往期的奖惩贴中,其他小伙伴们提交的题解。这里还是推荐问哥的python题解,虽然各种数学公式老顾看不懂,但这真的是很用心的博主咯。不像老顾这样,除了暴力做题,就还是暴力做题。以及昂累世士的 c++ 题解。这是已经参加过50期的两位大佬 ,CodeRecycle也有很多题解,但老顾因为不懂 c++ ,所以有时候抄这位大佬的内容,在每日一练中无法取得满意的结果,所以。。。。仁者见仁吧。
奖惩公告板块入口:https://bbs.csdn.net/forums/contest?typeId=137035,以老顾观察到的情况,题解主要集中在 c++ 和 python 上,其他语言的题解相对很少,至少老顾没见过用 js 和 c# 的题解。
不过因为往期比赛的题目,老顾没有提出来,毕竟老顾是从第27期才开始参加的,所以也不打算搜集往期具体出过哪些题目了,反正老顾自己的社区都已经被人笑称是一练社区了,就继续自己丰富后续内容好了。如果各位小伙伴有兴趣,也可以在老顾这里提交各自的答题内容哦,欢迎大家一起来破解 CSDN 每日一练的题目,嘿嘿。