Windows便笺(win10,win7便笺存储位置,恢复便笺数据)

JVM-常量池

  返回  

笔试题汇总

2021/8/21 21:39:27 浏览:

01分隔

第一行输入 n 字符串长度, 第二行为字符串,字符串只包含01,返回数组,表示每个位置前缀字符串能被划分为 01相同比例的子串的个数,例如 分成 两个子串01个数分别为 (a,b) & (c,d) 则满足 ad = bc。

思路: 遍历一次字符串,记录01出现次数,字典保存比例出现次数,比例化为最简,有一个出现0次的情况统一归为(0,1) | (1,0),将当前位置比例对应次数返回

import collections
import math

n = int(input())
s = input()
res = [1]*n
ones = zeros = 0
d = collections.defaultdict(int)
for i in range(n):
    if s[i] == '0':
        zeros += 1
    else:
        ones += 1
    if zeros == 0:
        d[(0, 1)] += 1
        res[i] = d[(0,1)]
    elif ones == 0:
        d[(1,0)] += 1
        res[i] = d[(1,0)]
    else:
        g = math.gcd(zeros, ones)
        d[(zeros//g, ones//g)] += 1
        res[i] = d[(zeros//g, ones//g)]
for r in res:
    print(r, end=' ')

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号