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")

你可能感兴趣的:(python,Codeforces,python)