美文网首页
Codeforces 1367C - Social Distan

Codeforces 1367C - Social Distan

作者: 费城的二鹏 | 来源:发表于2020-07-02 23:00 被阅读0次

日常一道算法题。

翻译

社会隔离

Polycarp 和他的朋友想要参观一个餐厅。餐厅有 n 个座子,排成一列。已经有一些客人坐在位置上,座位的编号为从 1 到 n。餐厅座位的状态被描述成 0 和 1,0 表示没有客人,1 表示有客人。

餐厅要求任何客人之间的距离最小间隔 k 个桌子。如果一个客人坐在了 i 位置,那么从 i - k 到 i + k 不能有别的客人。

你需要计算,目前餐厅最多能接待多少客人。

输入格式

第一行输入整数 t,表示测试用例组数。

每个测试用例输入两行,第一行输入整数 n 和 k。第二行输入长度为 n 的字符串,只包含 0 和 1。

输出格式

输出一个整数,表示可以接待客人的数量。

分析

模拟题很简单,遍历一遍字符串即可,并且标记当前开头是否是 1,每段连续 0 分别判断开头是否是 1,结尾是否是 1。

如果开头是 1,那么连续 0 的长度减 k,如果结尾是 1,长度也减 k。

然后长度除以 k 表示可以放置 1 的个数,如果长度不能整除k,个数再加 1。

最后输出总和。

代码(Python3)

# https://codeforces.com/problemset/problem/1367/C
 
import sys
import os
import heapq
import math
 
try:
    path = "./file/input.txt"
    if os.path.exists(path):
        sys.stdin = open(path, 'r')
    # sys.stdout = open(r"./file/output.txt", 'w')
except:
    pass
 
t = int(input())
 
def printd(value):
    # print(value)
    pass
 
def case():
    arr = list(map(int, input().split(" ")))
    n, k = arr[0], arr[1]
    arr = input()

    startOne = False
    length = 0
    result = 0
    for value in arr:
        if value == '1':
            length = max(0, length - k)
            if startOne:
                length = max(0, length - k)
            result += length // (k + 1) + (1 if length % (k + 1) > 0 else 0) 
            startOne = True
            length = 0
        else:
            length += 1

    if startOne:
        length = max(0, length - k)
    result += length // (k + 1) + (1 if length % (k + 1) > 0 else 0)

    print(result)

for _ in range(t):
    case()

更多代码尽在 https://github.com/Tconan99/Codeforces

by 费城的二鹏 2020.06.30 长春

相关文章

网友评论

      本文标题:Codeforces 1367C - Social Distan

      本文链接:https://www.haomeiwen.com/subject/zsefqktx.html