CSES - Datatähti 2023 loppu - Results
Submission details
Task:Merkkijonot
Sender:UpHereNorth
Submission time:2023-01-21 14:38:47 +0200
Language:C++17
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED15
#2ACCEPTED55
#3ACCEPTED30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5ACCEPTED0.00 s2, 3details
#6ACCEPTED0.00 s2, 3details
#7ACCEPTED0.01 s2, 3details
#8ACCEPTED0.01 s2, 3details
#9ACCEPTED0.01 s3details
#10ACCEPTED0.03 s3details
#11ACCEPTED0.04 s3details
#12ACCEPTED0.21 s3details
#13ACCEPTED0.01 s3details
#14ACCEPTED0.00 s3details
#15ACCEPTED0.01 s2, 3details
#16ACCEPTED0.25 s3details

Code

#include <bits/stdc++.h>

using namespace std;
using ll = long long;


const ll mod = (ll)1e9 + 7;

const int N = 500;

ll dp[N+1][251][251];



int main(){

    int n;
    cin >> n;
    vector<string> words(n+1);
    words[0] = "#";
    int sum =0;
    for(int i = 1; i <= n; ++i){
        cin>>words[i];
        sum += (int)words[i].size();
    }    

    if(sum%2){
        cout << "0\n";
        return 0;
    }

    vector<int> cnt(n+1);
    int tot_cnt = 0;
    for(int i = 1; i <= n; ++i){
        for(char c : words[i]){
            if(c=='a'){
                cnt[i]++;
                tot_cnt++;
            }
        }
    }

    if(tot_cnt%2){
        cout << "0\n";
        return 0;
    }

  
    dp[0][0][0] = 1;

    for(int i = 1; i <= n; ++i){
        for(int s = 0; s <= sum/2; ++s){
            for(int a = 0; a <= tot_cnt/2; ++a){
                dp[i][s][a] = dp[i-1][s][a];
                if(s-(int)words[i].size() >= 0 && a-cnt[i] >= 0){
                    dp[i][s][a] += dp[i-1][s-(int)words[i].size()][a-cnt[i]];
                }
                dp[i][s][a] %= mod;
            }
        }
    }

    cout << dp[n][sum/2][tot_cnt/2] << "\n";

    // we want that both
    // sets have the same number of total characters
    // and the same number of a's
    // first solve the problem
    // of just creating two sets with equal size:
    // maximum 500 chars in total
    // meaning that both sides
    // have max 250 chars
    // meaning what?
    // we can go through each number of a's (0 to 250)
    // go through 
    // dp[i], amount of ways until i
    // dp[0] = 0
    // dp[1] = 
    // how was two sets solved?
    // dp[i][sum][num of a's] tells how many ways there are to create set 
    // of size sum with specific num of a's
    // dp[0] = 1
    // dp[1] = 0
    // dp[2][s][a] = dp[1][s-words[i].size()][a-cnt[i]]






}

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: 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: ACCEPTED

input
50
aaba
aaa
abbbbaaba
ababbabbabab
...

correct output
636733956

user output
636733956

Test 11

Group: 3

Verdict: ACCEPTED

input
100
ba
bbbaba
bbba
bb
...

correct output
264657218

user output
264657218

Test 12

Group: 3

Verdict: ACCEPTED

input
500
a
b
b
b
...

correct output
394045503

user output
394045503

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