| Task: | Merkkijonot | 
| Sender: | Laserr | 
| Submission time: | 2023-01-21 16:33:32 +0200 | 
| Language: | C++ (C++11) | 
| Status: | READY | 
| Result: | 15 | 
| group | verdict | score | 
|---|---|---|
| #1 | ACCEPTED | 15 | 
| #2 | TIME LIMIT EXCEEDED | 0 | 
| #3 | TIME LIMIT EXCEEDED | 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.01 s | 2, 3 | details | 
| #8 | TIME LIMIT EXCEEDED | -- | 2, 3 | details | 
| #9 | ACCEPTED | 0.00 s | 3 | details | 
| #10 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #11 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #12 | TIME LIMIT EXCEEDED | -- | 3 | details | 
| #13 | ACCEPTED | 0.00 s | 3 | details | 
| #14 | ACCEPTED | 0.00 s | 3 | details | 
| #15 | TIME LIMIT EXCEEDED | -- | 2, 3 | details | 
| #16 | TIME LIMIT EXCEEDED | -- | 3 | details | 
Compiler report
input/code.cpp: In function 'll haku(ll, ll, ll)':
input/code.cpp:16:10: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     if(k == v.size() && as == ya && bs == yb) return 1;
      |        ~~^~~~~~~~~~~
input/code.cpp:17:10: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     if(k >= v.size() || as > ya || bs > yb) return 0;
      |        ~~^~~~~~~~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:35:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         for(int j = 0; j < s.length(); j++){
      |...Code
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll ya, yb; 
vector<pair<ll,ll>> v;
ll mod;
vector<vector<vector<ll>>> d;
ll haku(ll k, ll as, ll bs){
    if(k == v.size() && as == ya && bs == yb) return 1;
    if(k >= v.size() || as > ya || bs > yb) return 0;
    if(d[k][as][bs]) return d[k][as][bs];
    ll u = (haku(k + 1, as, bs) + haku(k + 1, as + v[k].first, bs + v[k].second)) % mod;
    //cout << k << " " << as << " " << bs << "\n";
    d[k][as][bs] = u; 
    return u;
}
int main(){
    cin >> n;
    mod = 1e9 - 7;
    ya = 0; 
    yb = 0;
    d.resize(n);
    for(int i = 0; i < n; i++){
        int a = 0; int b = 0;
        string s;
        cin >> s;
        for(int j = 0; j < s.length(); j++){
            if(s[j] == 'a') a++; 
            else b++; 
        }
        v.push_back({a, b});
        ya += a;
        yb += b;
    }
    if(ya % 2 == 1 || yb % 2 == 1){
        cout << 0;
        return 0; 
    }
    ya /= 2;
    yb /= 2;
    //cout << n << " " << ya << " " << yb << "\n";
    
    for(int i = 0; i < n; i++){
        d[i].resize(ya + 1);
        for(int j = 0; j <= ya; j++) d[i][j].resize(yb + 1);
    }
    sort(v.rbegin(), v.rend());
    cout << (haku(0, 0, 0)) % mod;
    
}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: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 a b a b ...  | 
| correct output | 
|---|
| 433105324 | 
| user output | 
|---|
| (empty) | 
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: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 ba bbbaba bbba bb ...  | 
| correct output | 
|---|
| 264657218 | 
| user output | 
|---|
| (empty) | 
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: TIME LIMIT EXCEEDED
| input | 
|---|
| 100 a a a a ...  | 
| correct output | 
|---|
| 538992043 | 
| user output | 
|---|
| (empty) | 
Test 16
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input | 
|---|
| 500 a a a a ...  | 
| correct output | 
|---|
| 515561345 | 
| user output | 
|---|
| (empty) | 
