热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Codeforces:B.清洁工的标记问题【零填充与位移操作】

在解决清洁工的标记问题时,首先需要去除字符串中的前导零。接着,对于中间的零,需要逐个进行补充,每个零的补充都需要额外的操作。完成中间零的填充后,才能进行有效的状态转移。因此,整个过程的关键在于对零的处理和状态的转换。

在这里插入图片描述

分析

去掉无用的前缀0
然后,中间的0需要一个个补(作为传递)
补一个0需要额外多一下
然后补充完中间的0后就可以进行有效的转移了
所以就是a的求和然后0的话加一即可

ac code

import sys
input &#61; sys.stdin.readlinefor _ in range(int(input())):n &#61; int(input())a &#61; list(map(int, input().split()))# flatten# find the pattern# fill the 0 take 1 step# after fill all the 0, can move from head to tailptr &#61; 0while ptr < n and a[ptr] &#61;&#61; 0:ptr &#43;&#61; 1ans &#61; 0for i in range(ptr, n - 1):if a[i] &#61;&#61; 0:ans &#43;&#61; 1else:ans &#43;&#61; a[i]print(ans)

总结

构造题 &#43; 跟0和非0打交道


推荐阅读
author-avatar
孤独小舟9
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有