CSES - Datatähti 2023 loppu - Results
Submission details
Task:Merkkijonot
Sender:UpHereNorth
Submission time:2023-01-21 13:58:19 +0200
Language:C++ (C++17)
Status:READY
Result:15
Feedback
groupverdictscore
#1ACCEPTED15
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5ACCEPTED0.01 s2, 3details
#60.00 s2, 3details
#70.01 s2, 3details
#8ACCEPTED0.02 s2, 3details
#90.00 s3details
#100.04 s3details
#11ACCEPTED0.07 s3details
#120.36 s3details
#130.00 s3details
#140.00 s3details
#150.02 s2, 3details
#160.38 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][N+1][N+1];



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;
    }

    // memset(dp, -1, sizeof(dp));
    dp[0][0][0] = 1;

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

    cout << 2ll * 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:

input
10
baabbbababbbabbaaaabab
aabaaabbbab
aaaabbabab
aab
...

correct output
2

user output
(empty)

Test 7

Group: 2, 3

Verdict:

input
20
aaaab
baaab
babb
b
...

correct output
4332

user output
1229765976

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
100
a
b
a
b
...

correct output
433105324

user output
433105324

Test 9

Group: 3

Verdict:

input
10
aaaabbabbaabbaaaabbbbabaaaabab...

correct output
0

user output
(empty)

Test 10

Group: 3

Verdict:

input
50
aaba
aaa
abbbbaaba
ababbabbabab
...

correct output
636733956

user output
213926462

Test 11

Group: 3

Verdict: ACCEPTED

input
100
ba
bbbaba
bbba
bb
...

correct output
264657218

user output
264657218

Test 12

Group: 3

Verdict:

input
500
a
b
b
b
...

correct output
394045503

user output
1394045510

Test 13

Group: 3

Verdict:

input
2
bbbababaaaabbbaaaaaaabbabbbaab...

correct output
2

user output
(empty)

Test 14

Group: 3

Verdict:

input
1
bbbaaaabaabbbababbbbbbbbabbbaa...

correct output
0

user output
(empty)

Test 15

Group: 2, 3

Verdict:

input
100
a
a
a
a
...

correct output
538992043

user output
1538992050

Test 16

Group: 3

Verdict:

input
500
a
a
a
a
...

correct output
515561345

user output
1515561352