博客
关于我
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/

    你可能感兴趣的文章
    php private ,public protected三者的区别
    查看>>
    php PSR规范
    查看>>
    php rand() 重复,array_rand()函数从另外一个数组中随机取得的一定数量的数组的元素是否会重复?...
    查看>>
    php redis(2)
    查看>>
    PHP Redis分布式锁
    查看>>
    PHP SOAP模块的使用方法:NON-WSDL模式
    查看>>
    php Socket通信
    查看>>
    PHP SPL标准库-迭代器
    查看>>
    PHP Static延迟静态绑定
    查看>>
    php zookeeper实现分布式锁
    查看>>
    PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
    查看>>
    php 反射
    查看>>
    PHP 学习笔记 (四)
    查看>>
    PHP 实现N阶矩阵相乘
    查看>>
    php 延迟静态绑定static关键字
    查看>>
    Redis入门
    查看>>
    PHP 截取字符串乱码的解决方案
    查看>>
    php 接口类与抽象类的实际作用
    查看>>
    PHP 插入排序 -- 折半查找
    查看>>
    PHP 支持8种基本的数据类型
    查看>>