CF-Round894-div3

C Flower City Fence
模拟
时间复杂度:O(n)。虽然是for+while两重循环,根据条件判断并不是O(n2)
空间复杂度:

# import sys
#
# sys.stdin = open('input.txt', 'r')


def main():
    # test case number
    tcn = int(input())
    for _ in range(tcn):
        n = int(input())
        nums = [int(x) for x in input().split()]
        flower_city_fence(n, nums)


def flower_city_fence(n, nums):
    h = nums[0]
    if h != len(nums):
        print('NO')
        return
    rst = [0 for _ in range(h)]
    j = n - 1
    for i in range(h):
        while True:
            if nums[j] - i > 0:
                break
            else:
                j -= 1
        rst[i] = j + 1
    if rst == nums:
        print('YES')
    else:
        print('NO')


if __name__ == '__main__':
    main()

D Ice Cream Balls
排列组合,二分查找。
exactly 准确构成n种排列。
思路,先选择m种冰淇淋,构成m(m-1)/2种冰淇淋,差一点点就到达n的那个m,再依次选择重复冰淇淋,step by step(每次加一),然后慢慢递增到n。

# import sys

# sys.stdin = open('input.txt', 'r')


def main():
    # test case number
    tcn = int(input())
    for _ in range(tcn):
        n = int(input())
        ice_cream_balls(n)


def ice_cream_balls(n):
    l = 0
    r = 10 ** 18
    while r - l > 1:
        m = (l + r) // 2
        if m * (m - 1) // 2 <= n:
            l = m
        else:
            r = m
    print(l + (n - l * (l - 1) // 2))


if __name__ == '__main__':
    main()

E Kolya and Movie Theatre
数学,堆,选择。

import heapq
import sys

# sys.stdin = open('input.txt', 'r')


def main():
    # test case number
    tcn = int(input())
    for _ in range(tcn):
        n, m, d = [int(x) for x in input().split()]
        a = [int(x) for x in input().split()]
        movie_theatre(n, m, d, a)


def movie_theatre(n, m, d, a):
    rst = 0
    hq = []
    v = 0

    for i in range(n):
        if a[i] < 0:
            continue
        if len(hq) < m:
            v += a[i]
            heapq.heappush(hq, a[i])
            rst = max(rst, v - (i + 1) * d)
        else:
            if a[i] < hq[0]:
                continue
            else:
                v += a[i] - hq[0]
                heapq.heappushpop(hq, a[i])
                rst = max(rst, v - (i + 1) * d)

    # print(hq)
    print(rst)


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值