| Task: | Merkkijonot | 
| Sender: | Kemm1706 | 
| Submission time: | 2023-01-21 14:38:31 +0200 | 
| Language: | C++ (C++20) | 
| Status: | READY | 
| Result: | 15 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 15 | 
| #2 | WRONG ANSWER | 0 | 
| #3 | WRONG ANSWER | 0 | 
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 3 | details | 
| #2 | ACCEPTED | 0.00 s | 1, 2, 3 | details | 
| #3 | ACCEPTED | 0.00 s | 1, 2, 3 | details | 
| #4 | ACCEPTED | 0.00 s | 1, 2, 3 | details | 
| #5 | ACCEPTED | 0.00 s | 2, 3 | details | 
| #6 | ACCEPTED | 0.00 s | 2, 3 | details | 
| #7 | ACCEPTED | 0.00 s | 2, 3 | details | 
| #8 | WRONG ANSWER | 0.07 s | 2, 3 | details | 
| #9 | ACCEPTED | 0.01 s | 3 | details | 
| #10 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #11 | WRONG ANSWER | 0.11 s | 3 | details | 
| #12 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #13 | ACCEPTED | 0.00 s | 3 | details | 
| #14 | ACCEPTED | 0.00 s | 3 | details | 
| #15 | WRONG ANSWER | 0.06 s | 2, 3 | details | 
| #16 | TIME LIMIT EXCEEDED | -- | 3 | details | 
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll, ll> pl;
typedef vector <pl> vpl;
const ll modd = 1e9 + 7;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    ll i, j, k, l, a, b, sa = 0, sb = 0, ca, cb, ans = 0;
    ll n[2];
    string s;
    map <pl, ll> mp[2];
    vpl p[2];
    vpl x[2];
    cin >> n[0];
    n[1] = n[0]/2;
    n[0] -= n[1];
    for(k = 0; k < 2; k++)
    {
        for(i = 0; i < n[k]; i++)
        {
            a = b = 0;
            cin >> s;
            l = s.length();
            for(j = 0; j < l; j++)
                if(s[j] == 'a')
                    a++;
                else
                    b++;
            p[k].push_back({a, b});
            sa += a;
            sb += b;
        }
        n[k] = (1 << n[k]);
    }
    /*for(auto [v, d] : p[1])
        cout << v << " " << d << "\n";
    cout << "\n";
    for(auto [v, d] : p[0])
        cout << v << " " << d << "\n";
    cout << "\n";*/
    if(sa % 2 != 0 || sb % 2 != 0)
    {
        cout << 0;
        return 0;
    }
    sa /= 2;
    sb /= 2;
    for(k = 0; k < 2; k++)
    {
        for(i = 0; i < n[k]; i++)
        {
            j = ca = cb = 0;
            while((1 << j) <= i)
            {
                if((1 << j) & i)
                {
                    ca += p[k][j].first;
                    cb += p[k][j].second;
                }
                j++;
            }
            if(ca <= sa && cb <= sb)
            {
                mp[k][{ca, cb}]++;
                if(mp[k][{ca, cb}] == 1)
                    x[k].push_back({ca, cb});
                //cout << ca << " " << cb << "\n";
            }
        }
        //cout << "\n";
    }
    l = x[0].size();
    for(i = 0; i < l; i++)
    {
        a = x[0][i].first;
        b = x[0][i].second;
        ans += mp[0][{a, b}] * mp[1][{sa - a, sb - b}];
        //cout << a << " " << b << " " << mp[0][{a, b}] << " " << mp[1][{sa - a, sb - b}] << "\n";
        ans %= modd;
    }
    cout << ans;
    return 0;
}
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: ACCEPTED
| input | 
|---|
| 16 b b a a ...  | 
| correct output | 
|---|
| 0 | 
| user output | 
|---|
| 0 | 
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: WRONG ANSWER
| input | 
|---|
| 100 a b a b ...  | 
| correct output | 
|---|
| 433105324 | 
| user output | 
|---|
| 0 | 
Test 9
Group: 3
Verdict: ACCEPTED
| input | 
|---|
| 10 aaaabbabbaabbaaaabbbbabaaaabab...  | 
| correct output | 
|---|
| 0 | 
| user output | 
|---|
| 0 | 
Test 10
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 50 aaba aaa abbbbaaba ababbabbabab ...  | 
| correct output | 
|---|
| 636733956 | 
| user output | 
|---|
| (empty) | 
Test 11
Group: 3
Verdict: WRONG ANSWER
| input | 
|---|
| 100 ba bbbaba bbba bb ...  | 
| correct output | 
|---|
| 264657218 | 
| user output | 
|---|
| 0 | 
Test 12
Group: 3
Verdict: TIME LIMIT EXCEEDED
| 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: WRONG ANSWER
| input | 
|---|
| 100 a a a a ...  | 
| correct output | 
|---|
| 538992043 | 
| user output | 
|---|
| 0 | 
Test 16
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 a a a a ...  | 
| correct output | 
|---|
| 515561345 | 
| user output | 
|---|
| (empty) | 
