CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
(请不要删掉此地址)
努力是为了让自己不平庸,你参加过哪些竞赛,有哪些收获?快来分享一下你的参赛经历吧!
前言/背景
偶然看到CSDN主页上的介绍,所以就顺手参加了一波,比赛的时候还差点忘记了,好在这个比赛并不强制要求统一时间答题。
大赛简介
CSDN每两周举办一次的周赛,目前已到第六期。内容是4个题目,难度不大,基本就是拼手速。但是那些4分钟能打完题目的就很离谱。另外写博客时只有一个答题报告,粘贴代码后还要自己调整缩进,非常费事。
参赛流程
1、9月18日 11:00前点击比赛报名,并于9月18日 8:30—11:00,PC端登陆考试系统(当前页面届时将开放考试入口),在2小时内完成考试作答
2、9月8日-9月26日,点击竞赛专属话题,在对应的模板编辑器里发稿成功即参与成功
参赛经历
解题思路
- 第一题:
严查军火,X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
def solution(self, n, vector):
result = 0
for i in range(n):
if vector[i]=='ak' or vector[i]=='m4a1' or vector[i]=='skr':
result += 1
return result
- 第二题:
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个
程序统计每年消耗数量最多的鬼画符吗?
def solution(self, n, vector):
result = None
Map = {}
for i in range(n):
if Map.get(vector[i]):
Map[vector[i]] += 1
else:
Map[vector[i]] = 1
c = 0
for item in Map.items():
if item[1] > c:
c = item[1]
result = item[0]
return result
- 第三题:
收件邮箱,已知字符串str,str表示邮箱的不标准格式。其中”.”会被记录成”dot”,”@”记录成”at”。写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
这里面有一些corner case需要注意
def solution(self, str):
result = str[0]
atTimes = False
i = 1
while i < (len(str)-3):
if not atTimes:
if str[i:(i+2)] == 'at':
result += '@'
i += 2
atTimes = True
continue
if str[i:(i+3)] == 'dot':
result += '.'
i += 3
continue
result += str[i]
i += 1
# 处理末尾的at
if not atTimes and i < (len(str)-2) and str[i:(i+2)] == 'at':
result += '@'
i += 2
aTimes = True
result += str[i:]
return result
- 第四题:
最长递增的区间长度,给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9]最长区间2,3,8长度为3
def solution(self, n, arr):
result = None
arr.append(1e9+1)
tmpL = 0
L = 0
for i in range(n):
if arr[i] <= arr[i+1]:
L += 1
else:
if tmpL < L:
tmpL = L
L = 0
if L !=0 and (tmpL+1) < L:
tmpL = L
else:
tmpL += 1
return tmpL
经验心得
按照正常人的手速,是不可能拿到前几名的,毕竟读题加思考也要用4分钟。