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