自学内容网 自学内容网

OD C卷 - 体育场找座位

体育场找座位 (100)

  • 体育场有一排座位(已有落座观众),观众之间必须至少一个空位才允许落座;
  • 在不移动现有观众座位的情况下,最多还能坐下多少人?

输入描述:
数组表示每个座位是否坐人,0未坐,1已坐人;数组长度在【1,10000】
输出描述:
输出最多还能坐多少人?

示例1:
输入:10001
输出:1

示例2:
输入:0101
输出:0

思路:

  • 遍历每个座位,若为1,则+2并继续循环;若为0,则继续判断左右位置是否为0,最终判断该位置是否可以入座;
  • 判断每个位置的左 右位置时,注意判断越界问题
    • 座位数为 1 则会双越界;
    • 座位数 >=2 则单越界;

# 输入座位
s = list(input().strip())
n = len(s)

# 长度为1   双越界
if n == 1:
    if s[0] == "1":
        result = 0
    else:
        result = 1
else: #  单越界
    i = 0
    result = 0
    while i < n:
        if s[i] == "1":
            i += 2
            continue
        else:
            left = i - 1
            right = i + 1
            condition = [
                (left < 0 and s[right] == "0"),
                (s[left] == "0" and right >= n),
                (left >=0 and right < n and s[left] == s[right] == "0")
            ]
            if any(condition):
                result += 1
                s[i] = "1"
                i += 2
            else:
                i += 1

print(result)

原文地址:https://blog.csdn.net/weixin_45228198/article/details/140675378

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!