蓝桥·算法赛——第06场

小白入门赛

1-元宵节快乐

2-猜灯谜

n = int(input())
a = list(map(int, input().split()))
for i in range(n):
    left = i - 1 if i > 0 else -1
    right = i + 1 if i < n-1 else 0
    print(a[left] + a[right], end=" ")

3-数学奇才

n = int(input())
a = list(map(int, input().split()))
# 当负数个数小于等于总数一半时,可以将 1 ~ i、1 ~ i - 1 翻转
    # 总次数为 2 * 负数个数,不超过 n
# 当负数超过一半,先将所有数翻转,再按上述方法,
    # 总次数为 2 * 小于一半 + 1,不超过 n
print(sum(i if i > 0 else -i for i in a))

4-你不干?有的是帕鲁干!

T = int(input())
for _ in range(T):
    x = int(input())
    if x % 8 == 0 and x != 0:
        print("Yes")
        print("{0} {1}".format(x // 4 - 1, x // 4 + 1))
    else:
        print("No")

5-等腰三角形

N = int(input())
A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))

pa = 0; pb = 0; ans = 0
while pa < N and pb < N:
    if 2 * A[pa] > B[pb]:
        pa += 1; pb += 1
        ans += 1
    else:
        pa += 1
print(ans)

6-计算方程

from math import sqrt, log, floor

t = int(input())
for _ in range(t):
    k, m = map(int, input().split())
    left = 1; right = m ** 2
    while left <= right:
        mid = (left + right) // 2
        num = sqrt(mid) + floor(log(mid, k))
        if num > m:
            right = mid - 1
        else:
            left = mid + 1
    print(left)

强者挑战赛

1-你不干?有的是帕鲁干!

T = int(input())
for _ in range(T):
    x = int(input())
    if x % 8 == 0 and x != 0:
        print("Yes")
        print("{0} {1}".format(x // 4 - 1, x // 4 + 1))
    else:
        print("No")

2-等腰三角形

N = int(input())
A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))

pa = 0; pb = 0; ans = 0
while pa < N and pb < N:
    if 2 * A[pa] > B[pb]:
        pa += 1; pb += 1
        ans += 1
    else:
        pa += 1
print(ans)

3-计算方程

from math import sqrt, log, floor

t = int(input())
for _ in range(t):
    k, m = map(int, input().split())
    left = 1; right = m ** 2
    while left <= right:
        mid = (left + right) // 2
        num = sqrt(mid) + floor(log(mid, k))
        if num > m:
            right = mid - 1
        else:
            left = mid + 1
    print(left)

4-谁是帕鲁?

5-源石开采

def build(o, L, R): # 建树
    if L == R: # 划分到一个区间
        Tree[o][0], Tree[o][1] = a[L], -1
        return
    Mid = (L + R) >> 1 # 划分
    build(o << 1, L, Mid) # o 的左端点和管辖区间
    build(o << 1 | 1, Mid + 1, R) # o 的右端点和管辖区间
    Tree[o][0] = max(Tree[o << 1][0], Tree[o << 1 | 1][0])
    Tree[o][1] = max(Tree[o << 1][1], Tree[o << 1 | 1][1])
    Tree[o][1] = max(Tree[o][1], min(Tree[o << 1][0], Tree[o << 1 | 1][0]))

def query(left, right, o, L, R): # 返回 [left, right] 中的最大值和第二大值
    if left <= L and R <= right: # 当 [left, right] 完全覆盖 [L, R]
        return Tree[o]
    Mid = (L + R) >> 1 # 划分区间
    if right <= Mid: # 全在左边
        return query(left, right, o << 1, L, Mid)
    elif left > Mid: # 全在右边
        return query(left, right, o << 1 | 1, Mid + 1, R)
    else: # Mid 在 [left, right] 中间
        temp1 = query(left, right, o << 1, L, Mid) # 左边
        temp2 = query(left, right, o << 1 | 1, Mid + 1, R) # 右边
        ans = [max(temp1[0], temp2[0]), max(max(temp1[1], temp2[1]), min(temp1[0], temp2[0]))]
        return ans # 返回一个数组

n, q = map(int, input().split())
a = [0] + list(map(int, input().split()))
Tree = [[0, 0] for _ in range(n << 2)] # 线段树(第一大, 第二大)
build(1, 1, n) # 1.建树(结点编号, a 左端点, a 右端点)
cnt = 0 # 统计源石数量
for _ in range(q):
    left, right = map(int, input().split())
    # (查询区间左端点, 查询区间右端点, 结点编号, 结点管辖左端点, 结点管辖右端点)
    cnt += sum(query(left, right, 1, 1, n))
m = int(input()) # 博弈论取石头
print(cnt, "\nred" if cnt % (m + 1) else "\nblue")

6-集合划分

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胆怯与勇敢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值