init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
91
9C.py
Normal file
91
9C.py
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
import sys
|
||||
|
||||
input_data = sys.stdin.read().split()
|
||||
if not input_data:
|
||||
sys.exit()
|
||||
|
||||
MOD = 998244353
|
||||
G = 3
|
||||
|
||||
def ntt(a, invert):
|
||||
n = len(a)
|
||||
j = 0
|
||||
for i in range(1, n):
|
||||
bit = n >> 1
|
||||
while j & bit:
|
||||
j ^= bit
|
||||
bit >>= 1
|
||||
j ^= bit
|
||||
if i < j:
|
||||
a[i], a[j] = a[j], a[i]
|
||||
step = 2
|
||||
while step <= n:
|
||||
half = step >> 1
|
||||
wlen = pow(G, (MOD - 1) // step, MOD)
|
||||
if invert:
|
||||
wlen = pow(wlen, MOD - 2, MOD)
|
||||
w = [1] * half
|
||||
curr = 1
|
||||
for i in range(half):
|
||||
w[i] = curr
|
||||
curr = (curr * wlen) % MOD
|
||||
for i in range(0, n, step):
|
||||
for j in range(half):
|
||||
u = a[i + j]
|
||||
v = (a[i + j + half] * w[j]) % MOD
|
||||
a[i + j] = (u + v) % MOD
|
||||
a[i + j + half] = (u - v + MOD) % MOD
|
||||
step <<= 1
|
||||
if invert:
|
||||
n_inv = pow(n, MOD - 2, MOD)
|
||||
for i in range(n):
|
||||
a[i] = (a[i] * n_inv) % MOD
|
||||
|
||||
def multiply(a, b):
|
||||
if not a or not b:
|
||||
return []
|
||||
sz = len(a) + len(b) - 1
|
||||
n = 1
|
||||
while n < sz:
|
||||
n <<= 1
|
||||
a = a + [0] * (n - len(a))
|
||||
b = b + [0] * (n - len(b))
|
||||
ntt(a, False)
|
||||
ntt(b, False)
|
||||
for i in range(n):
|
||||
a[i] = (a[i] * b[i]) % MOD
|
||||
ntt(a, True)
|
||||
return a[:sz]
|
||||
t = int(input_data[0])
|
||||
ptr = 1
|
||||
for _ in range(t):
|
||||
if ptr >= len(input_data):
|
||||
break
|
||||
n = int(input_data[ptr])
|
||||
s = input_data[ptr+1]
|
||||
ptr += 2
|
||||
A = [0] * n
|
||||
B = [0] * n
|
||||
for i in range(n):
|
||||
if s[i] == 'V':
|
||||
A[i] = 1
|
||||
elif s[i] == 'K':
|
||||
B[n - 1 - i] = 1
|
||||
C = multiply(A, B)
|
||||
bad = [False] * (n + 1)
|
||||
for k in range(len(C)):
|
||||
if C[k] > 0:
|
||||
dist = abs(n - 1 - k)
|
||||
if dist <= n:
|
||||
bad[dist] = True
|
||||
ans = []
|
||||
for p in range(1, n + 1):
|
||||
valid = True
|
||||
for m in range(p, n + 1, p):
|
||||
if bad[m]:
|
||||
valid = False
|
||||
break
|
||||
if valid:
|
||||
ans.append(p)
|
||||
print(len(ans))
|
||||
print(*(ans))
|
||||
Loading…
Add table
Add a link
Reference in a new issue