kickstart
一杯敬月光
这个作者很懒,什么都没留下…
展开
-
【kickstart 2021 roundF】第一题 trash bins Python题解
from collections import defaultdictT=int(input())for tt in range(T): N=int(input()) ss=input() ans=0 ll=[-999999 for nn in range(N)] rr=[9999999 for nn in range(N)] if ss[0]=='1': ll[0]=0 for nn in range(1,N):原创 2021-09-23 22:09:41 · 255 阅读 · 0 评论 -
【kickstart 2021 round D】前三题python题解
第一题:题目:给定一个3*3数组,中心位置数字缺失,问可以任意整数填充该位置的情况下最多可有多少个等差数列(行、列、对角线)此处需注意下只能用整数填充from collections import defaultdictdef diff(x): interval=[] n=len(x) for i in range(1,n): interval.append(x[i]-x[i-1]) return intervalT=int(input())for原创 2021-08-16 23:34:22 · 242 阅读 · 0 评论 -
【kickstart 2021 round C】前三题python题解
第一题:题目:给定长度为N的字符串S,它是由字母表上的前K个字母构成,问字典序小于S且长度为N的回文字符串(由字母表上的前K个字母构成)有多少个?解释:参考官方题解,计算多少个长度为N/2的字符串的字典序小于S[::math.ceil(N/2)],这里计算的方法可采用将字符串转化为K进制数–>十进制数。【代码暂时只能过test set 1,正在查找错误】注:小于该字符串的字符串个数就是这个K进制数。import mathT=int(input())for tt in range(T):原创 2021-08-16 06:44:34 · 217 阅读 · 0 评论 -
【kickstart 2021roundB】前三题Python题解
第一题:题目:给定字符串,判断到每一个字符为止,共有多少个递增子串。T=int(input())for tt in range(T): N=int(input()) s=input() ans=[1] for i in range(1,N): if s[i]>s[i-1]: ans.append(ans[-1]+1) else: ans.append(1) print('Cas原创 2021-08-15 06:58:05 · 236 阅读 · 0 评论 -
【kickstart 2021 roundA】前三题Python题解
第一题题目:给定长度为N的字符串,若第i位和第N-i+1位不同,则score加1。问 给定score,需要对字符串做多少次替换(将某一位替换成任意一个大写字母)。t=int(input())for tt in range(t): N,K=[int(s) for s in input().split()] s=input() ans=0 if N%2==0: nn=N//2 else: nn=N//2+1 for ii in原创 2021-08-14 05:21:20 · 212 阅读 · 0 评论 -
【kickstart round G 2020】前两题python 解题思路
题目1:给定一个字符串,KICK出现在START前面算一个有效序列,问共有多少个有效序列,不同序列之间可重叠,只要两个序列的KICK或START位置不同则视为不同序列。注意不同序列之间有重叠,即KICKICKSTART是两个有效序列。T=int(input())for tt in range(T): ss=input() n=len(ss) if n<=8: ans=0 else: num_kick=0 ans=0原创 2020-10-19 02:27:00 · 169 阅读 · 0 评论 -
【kickstart round F 2020】前两题 python 题解
第一题:一些人排队取钱,每次可取金额有限,所需金额超过单次可取金额则需重新排队,问出队顺序暴力遍历test2 会TLE;按取金额次数排序,得到的即是出队顺序,复杂度就是O(nlogn),可过test2from collections import dequeimport mathT=int(input())for tt in range(T): N,X=[int(s) for s in input().split()] withdraw=[int(s) for s in inp原创 2020-09-28 03:20:29 · 164 阅读 · 0 评论 -
【kickstart round B 2019】Building palindromes 第一题Python 题解
解题思路:直接暴力只能过test1如何能更快的判断回文字母呢?建立数组,在每个位置存储所有字母出现次数的前缀和代码:from collections import defaultdictT=int(input())for tt in range(T): N,Q=[int(s) for s in input().split(' ')] array=input() ans=0 pre_sum=[[0 for _ in range(26)]] for i in原创 2020-08-29 23:44:08 · 134 阅读 · 0 评论 -
【kickstart round A 2019】第一题Training Python题解
题目:教练从N个学生中挑选P个学生,并对之训练使P个同学技能值全部相同。解题思路:排序后,计算前缀和代码:T=int(input())for tt in range(T): N,P=[int(s) for s in input().split()] students=[int(s) for s in input().split()] students.sort() pre_sum=[0] for i in students: pre_su原创 2020-08-29 05:19:55 · 112 阅读 · 0 评论 -
【kickstart round E 2020】 Golden stone Python 解题思路只过小数据
用python照着Heltion的思路写依然只过了小数据,大数据TLE了。。。解题思路1 根据不同路口之间连接与否建图;2 dp数组表示每个路口拿到每种石头所需能量,开始初始化为无穷大,如该路口有某种石头,则其dp[i][j]=0;那与之有连接的路口取值为1;3 K数组表示每种合成方式用几种石头,sr数组表示每种合成方式用哪些石头,tg数组表示合成哪种石头;4 在每个路口更新获得不同石头所需能量,最小的dp[i][0]即为所求。代码from collections import dequef原创 2020-08-28 15:46:13 · 256 阅读 · 0 评论 -
【kickstart round E 2020】toys Python题解 只过了test 1
谨以此篇献给和我一样看的懂题解但下手写代码有点困难的同学~参考 HallStattMia 大神的代码,感觉大神的思路跟官方题解是一样的。(但改写成python后只能过小数据,大数据TLE了again),怒学C++解题思路(按官方题解里的变量定义)Ri 为记忆存续时间,Ei为玩的时间SUM为所有玩具Ei之和那当Ri+Ei>SUM时,表明该玩具在第二轮会造成中断;步骤:1 先把所有玩具按Ri+Ei之和排序,用heap降序存储;2 堆不为空时,判断Ri+Ei是否超出SUM,如果是则去掉该玩原创 2020-08-28 00:48:28 · 247 阅读 · 0 评论 -
【kickstart 2020 round E】前两题解题思路Python
还是只会做签到题。。题目1:Longest ArithmeticT=int(input())for tt in range(T): N=int(input()) array=[int(s) for s in input().split()] diff=[array[i]-array[i-1] for i in range(1,N)] if N==2: ans=2 else: ans=0 mark=9999原创 2020-08-26 00:07:53 · 168 阅读 · 0 评论 -
【kickstart 2020 round D】第3题Python 解题思路
继续总结round D 第3 4 题解题思路题目3 Beauty Tress题目4 Locked Doors原创 2020-07-18 07:58:10 · 250 阅读 · 0 评论 -
【kickstart2020 round D】前两题python解题思路
因为招行夏令营没有参加D轮,但事实是参加了依然是一题选手,无奈,在此总结前两题python解题思路。题目1 Record Breaker解题思路:前缀max代码:T=int(input())for tt in range(T): N=int(input()) num=[int(i) for i in input().split()] pre_max=[-1] # 此处注意不可以是0 for i in range(N): pre_max.append原创 2020-07-15 18:37:04 · 177 阅读 · 0 评论 -
【kickstart 2018 round H】Mural Python 解题思路
题目链接:解题思路:找到和最大的长度为ceil(N/2)的连续子序列即可T=int(input())for tt in range(T): N=int(input()) wall=input() if N%2==0: n=int(N/2) else: n=int(N//2+1) max_val=0 stack=[] for i in wall: stack.append(int(i)) p原创 2020-05-24 04:47:39 · 168 阅读 · 0 评论 -
【kickstart 2018 round H】Big Buttons Python解题思路
题目链接:解题思路:对<禁止出现前缀>按字符串长度排序,首先判断是否有子串是其他子串的前缀,如有,在<禁止前缀>中只保留最短子串即可(即,如某禁止子串中的前缀也是禁止子串,则该子串可删去)。先求出N次操作共有2**N种可能,再把以<禁止前缀>开头的N次操作的组合减去即可。T=int(input())for tt in range(T): N,P=[int(s) for s in input().split()] sub_str=[] for原创 2020-05-24 03:12:57 · 157 阅读 · 0 评论 -
【kickstart 2018 round A】Scrambled Words Python 解题思路 test 2 TLE
题目链接:解题思路:test set 1好过。。其实我本来想着就是用一个长度为26的数组统计每个字符出现次数,在比较子串与给定词首末字符相等后,比较所有字符出现次数是否相等,但不知哪里没考虑全面总是WA,所以这里就用 子串和给定词sorted后是否相等来判断。T=int(input())for tt in range(T): L=int(input()) words=[s for s in input().split()] S1,S2,N,A,B,C,D=[s for s i原创 2020-05-24 00:17:07 · 156 阅读 · 0 评论 -
【kickstart 2018 round A】Lucky Dip Python 解题思路
题目链接:解题思路:K=0时,不可放回,E是包中所有物品价值平均数,记为E0K=1时,共可拿2次,可放回1次。这时需考虑,如果拿了1次又放回,则下一次拿的物品价值的期望是E0;如果拿了价值小于E0的物品还不放回,那此时期望小于E0,如果拿了价值大于E0的物品不放回,那此时期望大于E0,记为E1。K=2时,共可拿3次,可放回2次。可拿2次的期望我们前面已知。我们从之后开始考虑,如果第3次拿了又放回,则此时状态与可拿2次后相同,期望为E1;如果第3次拿了不放回,则分第3次拿的物品价值大于还是小于E1,若原创 2020-05-23 22:58:31 · 273 阅读 · 0 评论 -
【kickstart 2018 round A】 Even Digits Python 解题思路
题目链接:解题思路:给定一个数字(假设位数为n),向下查找小于该数且每一位都是偶数,应该是n个8;向上查找大于该数且每一位都是偶数。从头开始,找到第一个不是偶数的位,若该位是9,则应往下找。T=int(input())for tt in range(T): num=int(input()) num_str=str(num) n=len(num_str) min_ans=num if num==1: min_ans=1 else:原创 2020-05-23 20:20:56 · 357 阅读 · 0 评论 -
【kickstart 2020 round C】第三题 Perfect Subarray Python 解题思路(test 2 TLE)
题目3:Perfect Subarray官方都提示了本题如果用慢的语言过不了test 2,那要不要学C++呢,可我觉得目前还是应该着重学习算法,我还不到追求程序效率的时候。。。看了前排大佬代码,改写成了Python,果不其然test 2 TLE了。。T=int(input())for tt in range(T): N=int(input()) array=[int(s) for s in input().split()] min_presum=0 dict1={}原创 2020-05-19 16:22:22 · 384 阅读 · 0 评论 -
【kickstart 2020 round C】前2题 Python 解题思路
题目1: Count down:计算数组中有多少个k, k-1, …, 1这样的连续序列。解题思路:先找到数组中所有的k,若一个k与下一个k的间隔不足k,则移除这个k,而后对其余所有k判断其后k-1的数是否依次递减至1T=int(input())for t in range(T): N,K=[int(s) for s in input().split()] ll=[int(s) for s in input().split()] listK=[] if K in ll原创 2020-05-19 06:25:48 · 430 阅读 · 0 评论