博客
关于我
HDU 5600 N bulbs (BestCoder Round #67 (div.2))
阅读量:633 次
发布时间:2019-03-14

本文共 1033 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要判断熊孩子是否可以从第一个灯泡走到最后一个灯泡,并在过程中将所有灯泡关闭。每经过一个灯泡,熊孩子都会按下开关,改变灯泡的状态。

方法思路

  • 问题分析:熊孩子从第一个灯泡走到最后一个灯泡,每经过一个灯泡都会按下开关,改变灯泡的状态。我们需要确保每个灯泡被按下的次数使其最终关闭。
  • 关键观察:灯泡的状态会根据被按下的次数改变。如果一个灯泡被按下偶数次,状态不变;如果被按下奇数次,状态改变。我们需要确保所有灯泡都被按下偶数次。
  • 连续0段分析:如果一个连续的0段被覆盖奇数次,灯泡会被改变状态,无法保持关闭。因此,我们需要统计所有连续的0段中奇数长度的数量。如果奇数长度的数量是偶数,则可以通过折返法使所有灯泡关闭。
  • 解决代码

    t = int(input())for _ in range(t):    n = int(input())    s = input().strip()    current_zero = 0    count_odd = 0    for c in s:        if c == '0':            current_zero += 1        else:            if current_zero > 0:                if current_zero % 2 == 1:                    count_odd += 1                current_zero = 0    if current_zero > 0:        if current_zero % 2 == 1:            count_odd += 1    print("YES" if count_odd % 2 == 0 else "NO")

    代码解释

  • 读取输入:首先读取测试用例的数量t,然后循环处理每个测试用例。
  • 遍历灯泡状态:对于每个灯泡状态字符串,遍历每个字符,记录当前连续的0的长度和奇数长度段的数量。
  • 统计奇数长度段:每当遇到一个1时,检查当前连续的0的长度,如果为奇数,则增加奇数长度段的数量,并重置当前长度。
  • 处理最后一段:遍历结束后,检查最后一段连续的0的长度,并更新奇数长度段的数量。
  • 判断结果:根据奇数长度段的数量是否为偶数,输出"YES"或"NO"。
  • 这个方法确保了在O(n)时间复杂度内解决问题,适用于大规模输入。

    转载地址:http://bcxoz.baihongyu.com/

    你可能感兴趣的文章
    POJ 2403
    查看>>
    poj 2406 还是KMP的简单应用
    查看>>
    POJ 2431 Expedition 优先队列
    查看>>
    Qt笔记——获取位置信息的相关函数
    查看>>
    POJ 2484 A Funny Game(神题!)
    查看>>
    POJ 2486 树形dp
    查看>>
    POJ 2488:A Knight's Journey
    查看>>
    SpringBoot为什么易学难精?
    查看>>
    poj 2545 Hamming Problem
    查看>>
    poj 2723
    查看>>
    poj 2763 Housewife Wind
    查看>>
    Qt笔记——模型/视图MVD 文件目录浏览器软件
    查看>>
    POJ 2892 Tunnel Warfare(树状数组+二分)
    查看>>
    poj 2965 The Pilots Brothers' refrigerator-1
    查看>>
    poj 3026( Borg Maze BFS + Prim)
    查看>>
    POJ 3041 - 最大二分匹配
    查看>>
    POJ 3041 Asteroids(二分匹配模板题)
    查看>>
    Qt笔记——标准文件对话框QFileDialog
    查看>>
    poj 3083 Children of the Candy Corn
    查看>>
    POJ 3083 Children of the Candy Corn 解题报告
    查看>>