“葡萄城杯”牛客周赛 Round 53

小红小紫投硬币

print(1/2)

小红的字符串

s = input()  # 直接接受输入
n = len(s)  # 计算字符串长度

# 初始化变量result,用于累加每一步的最小移动次数
result = 0

# 遍历字符串的前半部分
for i in range(n // 2):
    # 计算当前字符与其对称字符的ASCII码差值
    diff = abs(ord(s[i]) - ord(s[-i-1]))
    
    # 计算使字符匹配的最小移动次数,可以顺时针也可以逆时针
    min_step = min(diff, 26 - diff)
    
    # 将当前的最小步数加到总和中
    result += min_step

print(result)  # 输出结果

小红的 01 消除

n = input()  # 读取输入,虽然在此代码中没有使用n
s = input()  # 读取字符串s
x, y, z = map(int, input().split())  # 读取三个整数x, y, z
r = 0  # 初始化r,用于计数"01"子串的数量
while "01" in s and r < y:  # 只要字符串s中存在"01"且r小于y时,继续循环
    r += s.count("01")  # 计算s中"01"子串的数量,并累加到r上
    s = s.replace("01", "")  # 将s中的"01"子串移除
print(min(r, y))  # 输出r和y中的较小值

小红组比赛

# 读取行数和列数
n, m = map(int, input().split())
# 初始化存储所有行数据的列表
ques = []
# 读取每一行的数据
for _ in range(n):
    ques.append(list(map(int, input().split())))
# 读取目标值
tar = int(input())
# 初始化状态集合,开始时只有0(没有任何数相加的状态)
st = {0}

# 遍历每一行数据,更新状态集合
for u in ques:
    su = set()  # 新的状态集合,用于存储当前行处理后的所有可能的和
    # 遍历当前已有的所有和
    for x in st:
        # 将当前和与本行的每一个数相加,加入到新的状态集合中
        for y in u:
            su.add(x + y)
    # 更新状态集合为新的集合
    st = su

# 计算状态集合中的数与目标值的最小差值
print(min(abs(x - tar) for x in st))

折半丢弃

# 输入测试用例数
T = int(input())

# 定义函数,用于找出满足条件的最大整数k
def find_maximum_k(array):
    left, right = 1, min(array[-1], len(array)) + 1  # 初始化左右边界
    while left < right:
        mid = (left + right + 1) >> 1  # 计算中点
        seen = set()  # 创建一个集合来存储遇到的元素
        for x in array:
            while x != 0 and (x >= mid or x in seen):
                x //= 2  # 对x进行“折半”处理
            seen.add(x)  # 将处理后的x添加到集合中
        if len(seen) == mid:  # 如果集合的大小等于mid,说明可以扩展
            left = mid  # 移动左边界
        else:
            right = mid - 1  # 否则调整右边界
    return left  # 返回最大的k值

# 迭代处理每一个测试用例
for _ in range(T):
    n = int(input())  # 输入数组大小
    array = sorted(map(int, input().split()))  # 输入数组,并进行排序
    print(find_maximum_k(array))  # 调用函数并打印结果

小红走矩阵

pypy3

游游的删点直径

pypy3

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值