CSES - Datatähti 2023 loppu - Results
Submission details
Task:Merkkijonot
Sender:cppbetter
Submission time:2023-01-21 16:58:57 +0200
Language:C++ (C++20)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#20.00 s1, 2, 3details
#30.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5ACCEPTED0.00 s2, 3details
#60.00 s2, 3details
#70.00 s2, 3details
#80.00 s2, 3details
#9ACCEPTED0.00 s3details
#100.00 s3details
#110.00 s3details
#120.00 s3details
#13ACCEPTED0.00 s3details
#14ACCEPTED0.00 s3details
#150.00 s2, 3details
#160.00 s3details

Compiler report

input/code.cpp: In function 'int check(int, std::pair<int, int>)':
input/code.cpp:16:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     if(i == pairs.size())
      |        ~~^~~~~~~~~~~~~~~

Code

#include <iostream>
#include <string>
#include <vector>
#include <tuple>
#include <unordered_map>

std::vector<std::pair<int, int>> pairs;
int mem[1000];

// This is O(nm) algo
int check(int i, std::pair<int, int> val)
{
    if(val.first == 0 && val.second == 0)
        return 1;

    if(i == pairs.size())
        return 0;

    auto a = mem[i];
    if(a != -1)
        return a;

    std::pair<int, int> test;
    test.first = val.first - pairs[i].first;
    test.second = val.second - pairs[i].second;
    
    int sum = 0;
    if(test.second >= 0 && test.first >= 0)
        sum += check(i + 1, test) % 1000000007;
    sum += check(i + 1, val) % 1000000007;

    mem[i] = sum;
    return sum;
}

int main()
{
    int n;
    std::cin >> n;

    // Sub sum problem except sketchy???? so best case O(nm) ?????
    // Only half has to be cheked
    // pari (count of a, count of b) for 1 part

    pairs.resize(n);
    int totalA = 0;
    int totalB = 0;

    for(int i = 0; i < n; i++)
    {
        std::string str;
        std::cin >> str;

        // Count the intsances of a
        for(auto c : str)
        {
            if(c == 'a')
            {
                totalA++;
                pairs[i].first++;
            }
            else {
                totalB++;
                pairs[i].second++;
            }
        }
    }

    for(auto& a : mem)
        a = -1;

    //mem = { -1 };
    if(totalA % 2 == 0 && totalB % 2 == 0)
        std::cout << check(0, { totalA/2, totalB/2 }) << "\n";
    else
        std::cout << 0 << "\n";
}

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:

input
8
b
bb
baa
a
...

correct output
12

user output
0

Test 3

Group: 1, 2, 3

Verdict:

input
16
a
a
a
b
...

correct output
5040

user output
512

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:

input
10
baabbbababbbabbaaaabab
aabaaabbbab
aaaabbabab
aab
...

correct output
2

user output
0

Test 7

Group: 2, 3

Verdict:

input
20
aaaab
baaab
babb
b
...

correct output
4332

user output
0

Test 8

Group: 2, 3

Verdict:

input
100
a
b
a
b
...

correct output
433105324

user output
534939212

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
0

Test 11

Group: 3

Verdict:

input
100
ba
bbbaba
bbba
bb
...

correct output
264657218

user output
134099126

Test 12

Group: 3

Verdict:

input
500
a
b
b
b
...

correct output
394045503

user output
108302572

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:

input
100
a
a
a
a
...

correct output
538992043

user output
1423513790

Test 16

Group: 3

Verdict:

input
500
a
a
a
a
...

correct output
515561345

user output
726595008