Files
kattis/sequences.py

48 lines
1.1 KiB
Python

import enum
def count_inversions(seq: str)-> int:
inversions = 0
count = 0
for i, c in enumerate(seq):
if c == '0':
inversions += i - count
count += 1
return inversions
class sequence_generator:
def __init__(self, seq: str):
self._seq = seq
self.qpos = []
for i, c in enumerate(seq):
if c == '?':
self.qpos.append(i)
def __iter__(self):
self.max = pow(2, len(self.qpos))
self.current = 0
return self
def __next__(self):
if self.current < self.max:
new_seq = self._seq
bstr = "{0:b}".format(self.current)
bstr = "".join(("0" * (len("{0:b}".format(self.max)) - len(bstr) - 1), bstr))
for i, c in enumerate(bstr):
new_seq = f"{new_seq[:self.qpos[i]]}{c}{new_seq[self.qpos[i]+1:]}"
self.current += 1
return new_seq
raise StopIteration
seq = input()
if "?" not in seq:
sum = count_inversions(seq)
else:
s = sequence_generator(seq)
sum = 0
for x in s:
sum += count_inversions(x)
print(sum % 1000000007)