校招真题练习029 圈地运动(360)

圈地运动

圈地运动,就是用很多木棍摆在地上组成一个面积大于0的多边形~

小明喜欢圈地运动,于是他需要去小红店里面买一些木棍,期望圈出一块地来。小红想挑战一下小明,所以给小明设置了一些障碍。障碍分别是:
1.如果小明要买第i块木棍的话,他就必须把前i-1块木棍都买下来。
2.买了的木棍都必须用在圈地运动中。
那么请问小明最少买多少根木棍,才能使得木棍围成的图形是个面积大于0多边形呢?

输入描述:
第一行一个数n,表示木棍个数。
第二行n个数,第i个数表示第i个木棍的长度ai
1<=n<=10000
1<=ai<=10000

输出描述:
输出一个数,表示最少需要的木棍个数,如果无解输出-1

 1 def main():
 2     N = int(input())
 3     if N <= 2:
 4         print(-1)
 5     else:
 6         ary = list(map(int,input().split()))
 7         leftpart = ary[0] + ary[1]
 8         curmax = max(ary[0],ary[1])
 9         for i in range(2,N):
10             cur = ary[i]
11             if cur >= curmax:#新元素是最大的
12                 curmax = cur#更新最大元素
13                 if leftpart > cur:
14                     print(i+1)
15                     return
16                 else:
17                     leftpart += cur
18             else:#新元素不是最大的
19                 #不更新最大元素
20                 leftpart -= curmax
21                 leftpart += cur
22                 if leftpart > curmax:
23                     print(i+1)
24                     return
25                 else:
26                     leftpart += curmax
27         print(-1)
28
29 if __name__ == ‘__main__‘:
30     main()

算法思路:几何 + 贪心法。

判断是否能组成三角形:最小的两边之和大于第三边。

判断是否能组成四边形:最小的三边之和大于第四边。

……

判断是否能组成N边形,最小的N-1边之和大于第N边。

原文地址:https://www.cnblogs.com/asenyang/p/11280380.html

时间: 2024-10-31 08:17:57

校招真题练习029 圈地运动(360)的相关文章

2018 拼多多 校招真题 最大乘积

最大乘积 时间限制:1秒 空间限制:32768K 热度指数:8197 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE. 题目描述 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 示例1 输入 3 4 1 2 输出 8 思路分析:看到这个题目,下意识想到用Arrays.sort()排一下序, 因为输入的整数可以是负

2016校招真题之小球的距离

1.题目描述 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果. 测试样例: 100,90,80,70 返回:1020 2.代码实现 1 package com.wcy.october; 2 3 /** 4 * 时间:2016年10月16日 题目:小球的距离 5 * 题目描述:小东和三个

校招真题练习014 万万没想到之聪明的编辑(头条)

万万没想到之聪明的编辑 题目描述我叫王大锤,是一家出版社的编辑.我发现一个发现拼写错误的捷径: 1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC 请听题:请实现大锤的自动校对程序 输入

校招真题练习019 毕业旅行问题(头条)

毕业旅行问题 题目描述小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销.给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销. 输入描述:城市个数n(1<n≤20,包括北京)城市间的车票价钱 n行n列的矩阵 m[n][n] 输出描述:最小车费花销 s 牛客网上对此题的python语言判断似乎有问题,一直超时,之前做剑指O

精灵鼠从入口到出口最少减少速度(2019年哔哩哔哩校招真题)题解

题目以及输入输出描述: 题目很短.意思也很容易读懂. 题目要求就是  有一只老鼠,进入了一个迷宫,迷宫地图的大小为n*n.老鼠要从(起点)(0,0)坐标位置 到达 终点 (n-1,n-1)的位置. 老鼠的行动方式只有两种 —— 向下和向前. 每一个点都会让老鼠的速度降低(减少).求老鼠到达终点的时候最少减少的速度. 解题思路: 我们先考虑最后一步 到达终点,这一步可以从哪里来呢?根据题目分析因为老鼠只可以向下或者向前.所以到达终点(n-1,n-1)前,老鼠不是在(n-1,n-2), 就是在(n-

2016校招真题编程-懂二进制

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 解题思路:异或,除二取余 源代码: package SuperHakceMainPackage; import java.util.Scanner; public class SuperHakceMian { int countBitDiff(int n,int m){ return n ^ m; } int findN

2016校招真题之最大差值

1.题目描述 有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值.给定数组A及它的大小n,请返回最大差值. 测试样例: [10,5],2 返回:0 2.代码实现 1 package com.wcy.october; 2 3 /** 4 * 时间:2016年10月15日 5 * 题目:有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值.给定数组A及它的大小n,请返回最大差值. 6 * 测试样例:[10,5],2 返回:0 7 */ 8 public cla

2016校招真题之串的模式匹配

1.题目描述 对于两个字符串A,B.请设计一个高效算法,找到B在A中第一次出现的起始位置.若B未在A中出现,则返回-1.给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案. 测试样例: "acbc",4,"bc",2 返回:2 2.代码实现 1 package com.wcy.october; 2 3 /** 4 * 时间:2016年10月16日 5 * 题目:串的模式匹配 6 * 题目描述:对于两个字符串A,B.请设计一个高效算法,找到B在

2016校招真题之数组单调和

1.题目描述 现定义数组单调和为所有元素i的f(i)值之和.这里的f(i)函数定义为元素i左边(不包括其自身)小于等于它的数字之和.请设计一个高效算法,计算数组的单调和.给定一个数组A同时给定数组的大小n,请返回数组的单调和.保证数组大小小于等于500,同时保证单调和不会超过int范围. 测试样例: [1,3,5,2,4,6],6 返回:27 2.代码实现 1 import java.util.*; 2 3 public class MonoSum { 4 public static void