标签:nums buffer 每日 ret 循环 体重 字符串 100
昨日问题
每日一题 | 帆船比赛问题
昨天的题很简单,因为题目当中限定了n的数量只有50。这个量级非常小,我们可以随意玩耍。并且其实每一个人的体重也给了限定,最大也是50。所以这就导致了两个人的体重之和最多只能有100,那么我们剩下的就很简单了,我们只需要枚举一下100以内的每一个数作为两人的体重和,然后计算一下这个体重和可以构成多少组配对。
这里有一个取巧的方案是既然我们已经知道了每个人的体重不超过50,两个人的体重和不超过100,那么我们完全可以用一个长度100的数组来记录每个体重对应的运动员的人数。这样我们就不需要遍历数组就可以知道每个体重对应的人数了,这也是经典的空间换时间的做法。
我们来看AC代码:
t = int(input())
for _ in range(t):
n = int(input())
arr = [0 for _ in range(101)]
nums = list(map(int, input().split(' ')))
# 下标代表体重,体重的位置+1,表示该体重的人+1
for i in nums:
arr[i] += 1
# 排序并去重
nums = sorted(set(nums))
ret = 0
for i in range(100, 1, -1):
buffer = arr[:]
cur = 0
for c in nums:
# 只遍历前半部分
if c + c > i:
break
# c和i-c中人数较少的即使配对数
match = min(buffer[c], buffer[i - c]) if c != i - c else buffer[c] // 2
buffer[c] -= match
buffer[i-c] -= match
cur += match
ret = max(cur, ret)
print(ret)
今日问题
字符串循环问题
假设我们当下有一个字符串,我们定义它的左移是,它的右移是。我们定义一个如果一个字符串左移等于它的右移,那么这个字符串就是好字符串。
现在我们给定一个字符串,请问最少需要删除多少元素,可以使得它成为一个好字符串。
样例
标签:nums,buffer,每日,ret,循环,体重,字符串,100 来源: https://blog.51cto.com/u_15183480/2748014
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。