个人笔记——为保证M型红苹果而从树上采集的苹果的最低数量

91 阅读2分钟

为保证M型红苹果而从树上采集的苹果的最低数量

  • 最后更新 : 2021年8月6日

在四个方向(东、西、北、南)有不同种类的苹果树,它们可能同时长出红苹果和绿苹果,这样每棵树正好长出K个苹果,其方式如下。

  • N- 北边的树的数量没有红苹果。
  • S--南边的树没有绿苹果的数量。
  • W--西边的树有一些红苹果的数量。
  • E--东边的树有一些绿苹果。

然而,苹果的颜色在屋外是无法区分的。因此,任务是找出从树上收集的苹果的最少数量,以保证M个红苹果。如果不可能,则打印-1。

例子。

输入。 M = 10, K = 15, N = 0, S = 1, W = 0, E = 0
输出。 10
解释。 它只是从南方的第一棵树上得到10个苹果。

**输入。**M = 10, K = 15, N = 3, S = 0, W = 1, E = 0
输出。-1
**解释。**南方、北方和东方都没有红苹果。但是在西部至少有1个红苹果,而且总共有1棵树,因此,保证的红苹果总数为1*1=1,小于M。

办法。 南方的每个苹果都确保是红的。因此,首先从南边取一个苹果。在东部和西部,每棵树上至少有一个红苹果。这就是为什么,为了保证它被认为在东部和西部每棵树上只有1个红苹果。北部没有红苹果,所以,忽略这一点。按照下面的步骤来解决这个问题。

  • 如果 M小于等于S*K,则打印M。
  • 否则,如果 M小于等于S*K+E+W,则打印S*K+(M-S*K)*K
  • 否则打印**-1。**

下面是上述方法的实现。

Python3

# Python program for the above approach
# Function to minimum no. of apples
def minApples():
# If we get all required apple
# from South
if M <= S* K:
return M
# If we required trees at
# East and West
elif M <= S* K+ E+ W:
return S* K+ (M-S* K)* K
# If we doesn't have enough
# red apples
else:
return -1
# Driver Code
if __name__== "__main__":
# No. of red apple for gift
M= 10
# No. of red apple in each tree
K= 15
# No. of tree in North
N= 0
# No. of tree in South
S= 1
# No. of tree in West
W= 0
# No. of tree in East
E= 0
# Function Call
ans= minApples()
print(ans)

输出

10

时间复杂度。 O(1)
辅助空间。O (1)

读者请注意!现在不要停止学习。掌握竞争性编程的所有重要数学概念。 CP课程的基本数学以适合学生的价格获得所有重要的数学概念。要完成从学习语言到DS Algo和更多的准备工作,请参考 完整的面试准备课程.

我的个人笔记 箭头_下降_上升

保存