题目一
题目描述
有若干个数形成一个可重集合,它们中很多都想做一个中庸的数,即既不是集合中最大的(或之一),也不是集合中最小的(或之一)。显然,不可能满足所有数。好在还是有一些数并不介意这一点。你需要从这些数中选出一个可重的子集,该子集中介意成为最值的数都得到满足(指不能成为子集中的最值)。请计算可以取的最大可重子集的大小。
输入描述
第一行一个整数 n,1 <= n <= 100000
后面 n 行,每行两个整数 x, y,x <= 1000000000,y 为 0 或 1。x 表示该数的值,y 为 1 表示该数不介意成为最值,为 0 则表示介意。
输出描述
一个整数,表示可取的最大的子集大小
样例输入
5
4 1
2 0
8 1
9 0
5 0
样例输出
3
#索引、排序、掐头去尾
n = int(input())
arr = []
for _ in range(n):
x, y = map(int, input().split())
arr.append((x, y))
arr.sort()
res = 0
for i in range(len(arr)):
if arr[i][1] == 0:
res += 1
else:
break
for i in range(len(arr)-1, -1, -1):
if arr[i][1] == 0:
res += 1
else:
break
print(len(arr)-res)
5
4 1
2 0
8 1
9 0
5 0
3
题目二
题目描述
分竹子
小熊猫分竹子,竹子长n,分成k段,每段的长度可以为a,b,c
要求k尽可能大。
样例输入
6 2 3 4
样例输出
3
解释
长6 的竹子,分成3段,每段为2.
#用n长不断减去给到的a,b,c,看那个可以减得次数多即可。
def divide_bamboo(n, a, b, c):
k = 0
while n > 0:
if n >= a:
n -= a
k += 1
elif n >= b:
n -= b
k += 1
elif n >= c:
n -= c
k += 1
else:
break
return k
n, a, b, c = map(int, input().split())
print(divide_bamboo(n, a, b, c))
6 2 3 4
3
标签:arr,res,编程,样例,break,2022,input,秋招,竹子
From: https://www.cnblogs.com/AubeLiang/p/17153475.html