【CCF】201909-2小明种苹果(续)

 

 

 

 

测试用例
题目描述给出的第一组测试用例覆盖了以下情形:1棵苹果树掉苹果,苹果树的数据行内包含0, 小于0的整数和大于0的整数,以及E=0。
样例输入
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

题目描述给出的第二组测试用例覆盖了以下情形:多棵苹果树掉苹果,E=2,相邻3棵苹果树分散在头尾——通过该测试用例表明程序能较好地处理头尾相邻的特例。
样例输入
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

所有苹果树都掉了苹果的情形。目的是进一步验证计算E的值的代码是否正确。
样例输入
4
4 10 0 9 0
4 10 -2 7 0
4 10 -3 5 0
4 10 -1 8 0
样例输出
29 4 4

n=1的边界情形。根据题目描述的子任务表格,这是不会发生的。验证通过也不错。
样例输入
1
4 10 0 9 0
样例输出
9 1 0

n=3的边界情形,只有2棵掉了苹果。
样例输入
3
4 10 0 9 0
4 10 -2 7 0
2 10 0
样例输出
26 2 0

n=3的边界情形,3棵苹果树都掉了苹果。这种情形下,E=3。
样例输入
3
4 10 0 9 0
4 10 -2 7 0
4 10 -3 5 0
样例输出
21 3 3

n=2的边界情形。
样例输入
2
4 10 0 9 0
4 10 -2 7 0
样例输出
16 2 0

 

n=int(input())
t=0#苹果总数
d=0#掉落棵
e=0#连续三颗
E=[0]*(n*2)
for i in range(0,n):
    a=list(map(int,input().split()))
    dropsum=sum(x for x in a if x<0)
    dropsum=dropsum+a[1]#如果没有掉落的总数
    tempsum=0#实际总数
    for j in range(-1,-a[0]-1,-1):#从最后开始
        tempsum=tempsum+a[j]
        if a[j]>0:
            break
    t=t+tempsum
    if tempsum!=dropsum:#有掉落
        d=d+1  
        E[i]=1
        E[i+n]=1
for i in range(n,2*n):
    if sum(E[i-2:i+1])==3:
        e=e+1
print(t,d,e)
    '''第一个数是m
    第2个数是本树最初苹果数
    最后一个正数-之后的负数 =苹果最后数量
    有圆圈循环 可以用0-2n 数组b[] 若掉落 则b[i]..=1    
    '''

 

posted @ 2023-02-25 14:52  吃人不吐葡萄  阅读(24)  评论(0)    收藏  举报