关于教育网站的策划书,系统软件开发定制,网站标题logo怎么做的,免费传奇网站免费传奇牛客代码刷题记录1
问题一
给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个#xff1a; 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可#xff0c;不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式…牛客代码刷题记录1
问题一
给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值: [6] 6 * 6 36; [2] 2 * 2 4; [1] 1 * 1 1; [6,2] 2 * 8 16; [2,1] 1 * 3 3; [6, 2, 1] 1 * 9 9; 从上述计算可见选定区间 [6] 计算值为 36则程序输出为 36。 区间内的所有数字都在[0, 100]的范围内; 输入输出
输入描述: 第一行输入点集的个数 N 接下来 N 行每行两个数字代表点的 X 轴和 Y 轴。 对于 50%的数据, 1 N 10000; 对于 100%的数据, 1 N 500000;输出描述: 输出“最大的” 点集合 按照 X 轴从小到大的方式输出每行两个数字分别代表点的 X 轴和 Y轴。输入例子1: 5 1 2 5 3 4 6 7 5 9 0输出例子1: 4 6 7 5 9 0
解决方案
理解 如果x满足P中任意点都不在x的右上方区域内横纵坐标都大于x则称其为“最大的”- 不存在任何点其横纵坐标都大于点x -分析 1.对所有点x轴进行降序排序则第一个点一定是最大点 2.后面的点要想成为最大点只需其y值大于前面的最大的y值即可 3.最后倒序输出数组
if __name__ __main__:n int(input())
# 二维数组输入方式a []for _ in range(n): # ’_’作用同i循环标志a.append(list(map(int, input().split())))a.sort(keylambda x: x[0])j len(a) - 2tmpy a[-1][1]for i in range(len(a) - 1, -1, -1):if tmpy a[i][1]:tmpy a[i][1]a[j] a[i]j - 1for k in range(j 1, len(a)):print(a[k][0], a[k][1])函数/方法
nint(input(“[输入]”)) input()返回是一个字符串,int(input())把input()返回的字符串转换成整型,返回的是整型str.split(str, numstring.count(str) #通过指定分隔符对字符串进行切片如果参数 num 有指定值则分隔 num1 个子字符串,返回分割后的字符串列表。 str “Line1-abcdef \nLine2-abc \nLine4-abcd”; print str.split( ); # 默认以空格为分隔符包含 \n \t print str.split(’ , 1 ); # 以空格为分隔符分隔成两个map() 根据提供的函数对指定序列做映射。map(function, iterable, …)第一个参数 function 以参数序列中的每一个元素调用function函数返回包含每次 function函数返回值的新列表。 map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25]list()方法 list(tuple) 将元组转换为列表。 注元组与列表非常类似区别在于元组的元素值不能修改元组是放在括号()中列表是放于方括号[]中。 aTuple (123, ‘runoob’, ‘google’, ‘abc’) aList list(aTuple) print (列表元素 : ) print(aList) 列表元素 : [123, ‘runoob’, ‘google’, ‘abc’]list.sort() sort(cmp None ,key None, reverse False) 函数用于对原列表进行排序如果指定参数则使用比较函数指定的比较函数。没有返回值但是会对列表的对象进行排序。 cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。 key:可选参数主要是用来进行比较的元素只有一个参数具体的函数的参数就是取自于可迭代对象中指定可迭代对象中的一个元素来进行排序。 reverse:排序规则reverse True 降序 reverse False 升序默认。 list.sorted()有返回值返回对key值排好序的list
问题二
给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值: [6] 6 * 6 36; [2] 2 * 2 4; [1] 1 * 1 1; [6,2] 2 * 8 16; [2,1] 1 * 3 3; [6, 2, 1] 1 * 9 9; 从上述计算可见选定区间 [6] 计算值为 36则程序输出为 36。 区间内的所有数字都在[0, 100]的范围内;
输入输出 输入描述: 第一行输入数组序列长度n第二行输入数组序列。 对于 50%的数据, 1 n 10000; 对于 100%的数据, 1 n 500000; 输出描述: 输出数组经过计算后的最大值。 输入例子1: 3 6 2 1 输出例子1: 36
思路
遍历每个数并找出该数的最大区间即该数在区间中最小加总求积
if __name__ __main__:n int(input())a list(map(int, input().split()))ans 0for i in range(n):tmp a[i]l r iif tmp 0:continuewhile l - 1 0 and a[l - 1] tmp:l l - 1while r 1 n and a[r 1] tmp:r r 1ans max(ans, tmp * sum(a[l: r 1]))print(ans)continue 语句跳出本次循环而break跳出整个循环。 continue 语句用来告诉Python跳过当前循环的剩余语句然后继续进行下一轮循环用在while和for循环中。