CSES - Datatähti 2023 loppu - Results
Submission details
Task:Merkkijonot
Sender:okkokko
Submission time:2023-01-24 13:53:26 +0200
Language:PyPy3
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1, 2, 3details
#2ACCEPTED0.05 s1, 2, 3details
#3ACCEPTED0.05 s1, 2, 3details
#40.05 s1, 2, 3details
#5ACCEPTED0.05 s2, 3details
#6ACCEPTED0.05 s2, 3details
#7ACCEPTED0.07 s2, 3details
#8ACCEPTED0.14 s2, 3details
#9ACCEPTED0.05 s3details
#10--3details
#11--3details
#12--3details
#13ACCEPTED0.05 s3details
#14ACCEPTED0.05 s3details
#15ACCEPTED0.06 s2, 3details
#16ACCEPTED0.14 s3details

Code

# 2023 loppukilpailu C
import itertools
from collections import Counter
n = int(input())

merkit = [input() for _ in range(n)]
MODULO = (10**9 + 7)

whole_string = "".join(merkit)
total_a = whole_string.count("a")
total_b = len(whole_string) - total_a
merkkarit = [(k.count("a"), k.count("b")) for k in merkit]
half_a = total_a // 2
half_b = total_b // 2


def naive():
    total = 0
    for i in range(n):
        for jonot in itertools.combinations(merkkarit, i):
            if sum(j[0] for j in jonot) * 2 == total_a and sum(j[1] for j in jonot) * 2 == total_b:
                total += 1
    print(total % MODULO)


def combine(x: "Counter[tuple[int,int]]", y: "Counter[tuple[int,int]]"):
    global half_a, half_b
    out = x + y
    for kx, vx in x.items():
        for ky, vy in y.items():
            k0 = kx[0] + ky[0]
            k1 = kx[1] + ky[1]
            if k0 <= half_a and k1 <= half_b:
                out[(k0, k1)] += vx * vy
    return out


def halve(x, d=0):
    # print("halving", d, x)
    if len(x) <= 1:
        return Counter(x)
    return combine(halve(x[:len(x) // 2], d + 1), halve(x[len(x) // 2:], d + 1))


def combinations():
    m = halve(merkkarit)
    # print(m)
    print(m[half_a, half_b] % MODULO)

    pass


combinations()

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
4
b
bbb
baabaabaa
aab

correct output
0

user output
0

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
b
bb
baa
a
...

correct output
12

user output
12

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
16
a
a
a
b
...

correct output
5040

user output
5040

Test 4

Group: 1, 2, 3

Verdict:

input
16
b
b
a
a
...

correct output
0

user output
4410

Test 5

Group: 2, 3

Verdict: ACCEPTED

input
5
bab
bbaaabbabbbaababbbabbabaaabaaa...

correct output
0

user output
0

Test 6

Group: 2, 3

Verdict: ACCEPTED

input
10
baabbbababbbabbaaaabab
aabaaabbbab
aaaabbabab
aab
...

correct output
2

user output
2

Test 7

Group: 2, 3

Verdict: ACCEPTED

input
20
aaaab
baaab
babb
b
...

correct output
4332

user output
4332

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
100
a
b
a
b
...

correct output
433105324

user output
433105324

Test 9

Group: 3

Verdict: ACCEPTED

input
10
aaaabbabbaabbaaaabbbbabaaaabab...

correct output
0

user output
0

Test 10

Group: 3

Verdict:

input
50
aaba
aaa
abbbbaaba
ababbabbabab
...

correct output
636733956

user output
(empty)

Test 11

Group: 3

Verdict:

input
100
ba
bbbaba
bbba
bb
...

correct output
264657218

user output
(empty)

Test 12

Group: 3

Verdict:

input
500
a
b
b
b
...

correct output
394045503

user output
(empty)

Test 13

Group: 3

Verdict: ACCEPTED

input
2
bbbababaaaabbbaaaaaaabbabbbaab...

correct output
2

user output
2

Test 14

Group: 3

Verdict: ACCEPTED

input
1
bbbaaaabaabbbababbbbbbbbabbbaa...

correct output
0

user output
0

Test 15

Group: 2, 3

Verdict: ACCEPTED

input
100
a
a
a
a
...

correct output
538992043

user output
538992043

Test 16

Group: 3

Verdict: ACCEPTED

input
500
a
a
a
a
...

correct output
515561345

user output
515561345