CCF 201909-2 小明种苹果(续) python 满分

    科技2022-07-11  82

    CCF 201909-2 小明种苹果(续) python 满分

    题目叙述问题描述:略输入格式:略输出格式:略样例 满分证明解题思路自己版本大佬版本 满分代码满分代码一自己版本满分代码二大佬版本 感谢及参考博文

    题目叙述

    问题描述:略

    输入格式:略

    输出格式:略

    样例

    样例输入 4 4 74 -7 -12 -5 5 73 -8 -6 59 -4 5 76 -5 -10 60 -2 5 80 -6 -15 59 0 样例输出 222 1 0 样例输入 5 4 10 0 9 0 4 10 -2 7 0 2 10 0 4 10 -3 5 0 4 10 -1 8 0 样例输出 39 4 2 样例输入 4 4 74 -7 -12 -5 5 73 -8 -6 59 -4 5 76 -5 -10 60 -2 58 -1 5 80 -6 -15 59 0 样例输出 221 1 0

    满分证明

    下面这个是满分代码二的证明,各项指标优于满分代码一

    解题思路

    自己版本

    思路就是模拟整个过程 重写时注意事项: 判断完有脱落,记得将待计算苹果数重新赋值。

    大佬版本

    很清晰的思路,不多讲,下面是我复现的

    满分代码

    满分代码一

    自己版本

    n = int(input()) ss = [] for i in range(1, n + 1): # 默认果树无脱落 flag = 0 s = input().replace(" 0", " +0") ll = list(map(int, s.split())) ll.pop(0) o = s.index(" ") sd = s[o + 1:] ta = list(map(lambda x: x > 0, ll)) T_num = ta.count(True) if T_num > 1: for _ in range(T_num - 1): tni = ta.index(True) ta[tni] = False ni = ta.index(True) # 原先苹果数 os = eval(" ".join(map(str, ll[tni:ni])).replace(" 0", " +0")) ns = ll[ni] # 判断果树脱落 if os != ns: flag = 1 break # 最终苹果数 ta.reverse() ni = len(ta)-1-ta.index(True) temp = " ".join(map(str, ll[ni:])).replace(" 0", " +0") fis = eval(temp) else: fis = eval(sd) ss.append([i, flag, fis]) t = sum(list(map(lambda x: x[2], ss))) f = sum(list(map(lambda x: x[1], ss))) e = 0 for i in range(n): a = i b = i + 1 c = i + 2 if b >= n - 1: b = b - n if c >= n - 1: c = c - n if ss[a][1] + ss[b][1] + ss[c][1] == 3: e += 1 print(t, f, e, end=" ")

    满分代码二

    n = int(input()) xl=[] t,d,e=0,0,0 for i in range(n): dl_flag=0 ll=list(map(int,input().split())) f=ll[1] for a in range(2,ll[0]+1): if ll[a]>0: if f==ll[a]: continue else: dl_flag=1 f=ll[a] else: f=f+ll[a] t=t+f if dl_flag==1: d=d+1 xl.append(1) else: xl.append(0) if xl[n-1]+xl[n-2]+xl[0]==3: e=e+1 if xl[n-1]+xl[1]+xl[0]==3: e=e+1 for i in range(n-2): if sum(xl[i:i+3])==3: e=e+1 print(t,d,e)

    大佬版本

    n = int(input()) ss = [] tl = [0] * n T, D, E = 0, 0, 0 for i in range(n): ll = list(map(int, input().split())) ss.append(ll[1:]) for plist in ss: yg = plist[0] for i in range(1, len(plist)): if plist[i] <= 0: yg = yg + plist[i] elif yg != plist[i]: tl[ss.index(plist)] = 1 yg = plist[i] T = T + yg D = sum(tl) for i in range(n): a = i b = i + 1 c = i + 2 if b >= n - 1: b = b - n if c >= n - 1: c = c - n if tl[a] + tl[b] + tl[c] == 3: E += 1 print(T, D, E, end=" ")

    感谢及参考博文

    部分内容参考以下链接,这里表示感谢 Thanks♪(・ω・)ノ 参考博文1 201909-2 小明种苹果(续)python实现 100分 https://blog.csdn.net/qq_39023569/article/details/102237985

    Processed: 0.030, SQL: 8