最多保存的青蛙
Maximum Frogs Saved
在一条直线上有N只青蛙、一条蛇和一个洞。蛇出现在 0 处,洞出现在 X 处。所有 N 只青蛙都出现在蛇和洞之间。 X 的值和 N 只青蛙的位置作为输入传递给 13the 程序。每秒钟,一只青蛙可以正好向右移动 1 个位置,但蛇总是在青蛙移动后向右移动 1 个位置。如果青蛙到达洞口,那么它就不会被蛇咬到。如果蛇到达任何一只青蛙的位置,它就会吃掉该位置的所有青蛙。该程序必须打印可以从蛇中保存的青蛙的最大数量作为输出。
注意:蛇不进洞
这是我的代码:
n=int(input())
a=[int(i) for i in input().split()]
b=int(input())
ak=[''] *(b+1)
ak[0]='S'
ak[b]='H'
for i in range(len(a)):
ak[a[i]]+='F'
for j in range(len(ak)):
if ak[j]=='':
ak[j]='*'
print(ak)
My output:
[S,*,*,*,FF,F,*,F,F,F,H]
但我需要这个输出
Input:
6
4 7 5 8 4 9
10
Output:
3
Explanation:
Here N=6, X=10, and the given 6 integers are 4 7 5 8 4 9.
The maximum number of frogs that can be saved from the snake is 3.
One of the possible ways to save 3 frogs is given below.
At T=0, [S,*,*,*,FF,F,*,F,F,F,H]
At T=1, [*,S,*,*,FF,F,*,F,F,*,HF]
At T=2, [*,*,S,*,FF,F,*,F,*,F,HF]
At T=3, [*,*,*,S,FF,F,*,F,*,*,HFF]
At T=4, [*,*,*,*,S,F,*,*,F,*,HFF]
At T=5, [*,*,*,*,*,S,*,*,*,F,HFF]
At T=6, [*,*,*,*,*,*,S,*,*,*,HFFF]
S- Snake
H- Hole
F- Frog
*- Empty Space
我不知道如何迭代和替换那个*、S、F。请给我解释一下这个问题背后的逻辑。
首先我按降序对青蛙位置列表进行排序,然后遍历排序后的列表并检查洞和青蛙之间的距离是否小于蛇和洞之间的距离,如果是这种情况,我将 +1 添加到 ans
并将青蛙和洞之间的距离添加到 snake
值。
代码:
n=int(input())
a=[int(i) for i in input().split()]
x=int(input())
a.sort(reverse=True)
snake = 0
ans = 0
for frog in a:
if x-frog < x-snake:
ans +=1
snake += (x-frog)
print(ans)
输入:
6
4 7 5 8 4 9
10
输出:
3
解释:
sorted list = [9,8,7,5,4,4]
第一只青蛙 10-9 < 10-0
所以 ans += 1
和 snake += (10-9) = 1
第二只青蛙 10-8 < 10-1
所以 ans += 1
和 snake += (10-8) = 3
第三只青蛙 10-7 < 10-3
所以 ans += 1
和 snake += (10-7) = 6
现在可以看到蛇已经在6
位置,4
和5
位置的青蛙没有动所以不会被保存
所以最后ans = 3
在一条直线上有N只青蛙、一条蛇和一个洞。蛇出现在 0 处,洞出现在 X 处。所有 N 只青蛙都出现在蛇和洞之间。 X 的值和 N 只青蛙的位置作为输入传递给 13the 程序。每秒钟,一只青蛙可以正好向右移动 1 个位置,但蛇总是在青蛙移动后向右移动 1 个位置。如果青蛙到达洞口,那么它就不会被蛇咬到。如果蛇到达任何一只青蛙的位置,它就会吃掉该位置的所有青蛙。该程序必须打印可以从蛇中保存的青蛙的最大数量作为输出。 注意:蛇不进洞
这是我的代码:
n=int(input())
a=[int(i) for i in input().split()]
b=int(input())
ak=[''] *(b+1)
ak[0]='S'
ak[b]='H'
for i in range(len(a)):
ak[a[i]]+='F'
for j in range(len(ak)):
if ak[j]=='':
ak[j]='*'
print(ak)
My output:
[S,*,*,*,FF,F,*,F,F,F,H]
但我需要这个输出
Input:
6
4 7 5 8 4 9
10
Output:
3
Explanation:
Here N=6, X=10, and the given 6 integers are 4 7 5 8 4 9.
The maximum number of frogs that can be saved from the snake is 3.
One of the possible ways to save 3 frogs is given below.
At T=0, [S,*,*,*,FF,F,*,F,F,F,H]
At T=1, [*,S,*,*,FF,F,*,F,F,*,HF]
At T=2, [*,*,S,*,FF,F,*,F,*,F,HF]
At T=3, [*,*,*,S,FF,F,*,F,*,*,HFF]
At T=4, [*,*,*,*,S,F,*,*,F,*,HFF]
At T=5, [*,*,*,*,*,S,*,*,*,F,HFF]
At T=6, [*,*,*,*,*,*,S,*,*,*,HFFF]
S- Snake
H- Hole
F- Frog
*- Empty Space
我不知道如何迭代和替换那个*、S、F。请给我解释一下这个问题背后的逻辑。
首先我按降序对青蛙位置列表进行排序,然后遍历排序后的列表并检查洞和青蛙之间的距离是否小于蛇和洞之间的距离,如果是这种情况,我将 +1 添加到 ans
并将青蛙和洞之间的距离添加到 snake
值。
代码:
n=int(input())
a=[int(i) for i in input().split()]
x=int(input())
a.sort(reverse=True)
snake = 0
ans = 0
for frog in a:
if x-frog < x-snake:
ans +=1
snake += (x-frog)
print(ans)
输入:
6
4 7 5 8 4 9
10
输出:
3
解释:
sorted list = [9,8,7,5,4,4]
第一只青蛙 10-9 < 10-0
所以 ans += 1
和 snake += (10-9) = 1
第二只青蛙 10-8 < 10-1
所以 ans += 1
和 snake += (10-8) = 3
第三只青蛙 10-7 < 10-3
所以 ans += 1
和 snake += (10-7) = 6
现在可以看到蛇已经在6
位置,4
和5
位置的青蛙没有动所以不会被保存
所以最后ans = 3