Codeforces Round #512 C. Vasya and Golden Ticket


题目链接


关于为什么将两个while换成for之后,内存开销减少了60%存疑
考虑之后把for循环去掉,提高代码可读性

· 注意都是0的情况要单独讨论,因为if dig_sum % part_sum中,part_sum不能为0
· 注意善用range和for的结合,比while更好
· 在py中用exit()退出,注意和C++的区别(这里要单独找时间学习一下)

代码如下:

# C. Vasya and Golden Ticket

n = int(input())
digits = list(input())
digits = list(map(int, digits))
dig_sum = sum(digits)
part_sum = 1
if dig_sum == 0:
    print("YES\n")
    exit()
# 由于数据量不大,因此枚举每一种可能的部分和
for part_sum in range(1, dig_sum):      # 用for比 while代码量更小,占内存也更小
    if dig_sum % part_sum != 0:
        #part_sum += 1	这句不会影响part_sum的值!
        continue
    temp = 0                            # 注意要置零!!
    for i in range(0, n):               # i就不需要再置零了,每次都会从range的第一个开始
        temp += digits[i]
        if temp == part_sum:            # 这里不需要再开一个flag,直接用temp就很方便
            temp = 0
        elif temp > part_sum:
            break
    if temp == 0:
        print("YES\n")
        exit()
print("NO\n")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值