CSES - Datatähti 2025 alku - Results
Submission details
Task:Niitty
Sender:Chenran
Submission time:2024-11-10 17:34:59 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
#40
#50
#60
Test results
testverdicttimegroup
#10.00 s1, 2, 3, 4, 5, 6details
#20.00 s1, 2, 3, 4, 5, 6details
#30.00 s1, 2, 3, 4, 5, 6details
#40.00 s1, 2, 3, 4, 5, 6details
#50.00 s1, 2, 3, 4, 5, 6details
#60.00 s2, 3, 4, 5, 6details
#70.00 s2, 3, 4, 5, 6details
#80.00 s2, 3, 4, 5, 6details
#90.00 s2, 3, 4, 5, 6details
#100.00 s3, 4, 5, 6details
#110.01 s3, 4, 5, 6details
#120.00 s3, 4, 5, 6details
#130.00 s3, 4, 5, 6details
#140.00 s4, 5, 6details
#150.01 s4, 5, 6details
#160.00 s4, 5, 6details
#170.01 s4, 5, 6details
#180.01 s5, 6details
#190.01 s5, 6details
#200.01 s5, 6details
#210.01 s5, 6details
#220.02 s6details
#230.04 s6details
#240.01 s6details
#250.02 s6details

Code

#include <iostream>
#include <map>

using namespace std;

map<char, int> sub_count(map<char, int> &total_counts, map<char, int> &line_counts)
{
    map<char, int> res;
    for (auto &p : total_counts)
    {
        int diff = p.second - line_counts[p.first];
        if (diff > 0)
        {
            res[p.first] = diff;
        }
    }
    return res;
}

int compute_combination_count(int x, int y)
{
    if (x <= 0 || y <= 0)
        return 0;

    return x * (x + 1) / 2 * y * (y + 1) / 2;
}

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

    string s;
    char grid[n][n];
    for (int i = 0; i < n; i++)
    {
        cin >> s;
        for (int j = 0; j < n; j++)
        {
            grid[i][j] = s[j];
        }
    }

    map<char, int> row_counts[n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            row_counts[i][grid[i][j]]++;
        }
    }

    map<char, int> col_counts[n];
    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < n; i++)
        {
            col_counts[j][grid[i][j]]++;
        }
    }

    map<char, int> total_counts;
    for (int i = 0; i < n; i++)
    {
        for (auto &p : row_counts[i])
        {
            total_counts[p.first] += p.second;
        }
    }

    map<char, int> temp_counts;
    temp_counts = total_counts;
    int down_index = 0;
    while (down_index < n && temp_counts.size() == total_counts.size())
    {
        temp_counts = sub_count(temp_counts, row_counts[down_index++]);
    }

    temp_counts = total_counts;
    int up_index = n - 1;
    while (up_index >= 0 && temp_counts.size() == total_counts.size())
    {
        temp_counts = sub_count(temp_counts, row_counts[up_index--]);
    }

    temp_counts = total_counts;
    int right_index = 0;
    while (right_index < n && temp_counts.size() == total_counts.size())
    {
        temp_counts = sub_count(temp_counts, col_counts[right_index++]);
    }

    temp_counts = total_counts;
    int left_index = n - 1;
    while (left_index >= 0 && temp_counts.size() == total_counts.size())
    {
        temp_counts = sub_count(temp_counts, col_counts[left_index--]);
    }

    int total_combination_count = compute_combination_count(n, n);

    int bottom_combination_count = compute_combination_count(n - down_index, n);
    int top_combination_count = compute_combination_count(up_index + 1, n);
    int right_combination_count = compute_combination_count(n - right_index, n);
    int left_combination_count = compute_combination_count(left_index + 1, n);

    int center_row_combination_count = compute_combination_count(right_index - left_index + 1, n);
    int center_col_combination_count = compute_combination_count(up_index - down_index + 1, n);
    int top_left_combination_count = compute_combination_count(up_index + 1, left_index + 1);
    int top_right_combination_count = compute_combination_count(up_index + 1, n - right_index);
    int bottom_left_combination_count = compute_combination_count(n - down_index, left_index + 1);
    int bottom_right_combination_count = compute_combination_count(n - down_index, n - right_index);

    int top_middle_combination_count = compute_combination_count(right_index - left_index + 1, up_index + 1);
    int bottom_middle_combination_count = compute_combination_count(right_index - left_index + 1, n - down_index);
    int left_middle_combination_count = compute_combination_count(up_index - down_index + 1, left_index + 1);
    int right_middle_combination_count = compute_combination_count(up_index - down_index + 1, n - right_index);

    int center_combination_count = compute_combination_count(right_index - left_index + 1, up_index - down_index + 1);

    int res = total_combination_count -
              (bottom_combination_count + top_combination_count + right_combination_count + left_combination_count) +
              (center_row_combination_count + center_col_combination_count + top_left_combination_count + top_right_combination_count + bottom_left_combination_count + bottom_right_combination_count) -
              (top_middle_combination_count + bottom_middle_combination_count + left_middle_combination_count + right_middle_combination_count) +
              center_combination_count;

    cout << res << endl;

    return 0;
}

Test details

Test 1

Group: 1, 2, 3, 4, 5, 6

Verdict:

input
10
TNCTNPNTPC
NPPNTNTPTP
NTNTTCNTCT
NPCPNPPNTT
...

correct output
2035

user output
7315

Test 2

Group: 1, 2, 3, 4, 5, 6

Verdict:

input
10
NFWQLWNWYS
DZOQJVXFPJ
CNHXPXMCQD
QRTBVNLTQC
...

correct output
9

user output
-33

Test 3

Group: 1, 2, 3, 4, 5, 6

Verdict:

input
10
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
...

correct output
3025

user output
7315

Test 4

Group: 1, 2, 3, 4, 5, 6

Verdict:

input
10
FFFFFFFFFF
FFFFFCFFFF
FFFFFFJFFF
FFFFFFFFFF
...

correct output
12

user output
-72

Test 5

Group: 1, 2, 3, 4, 5, 6

Verdict:

input
1
X

correct output
1

user output
7

Test 6

Group: 2, 3, 4, 5, 6

Verdict:

input
20
BBCBUBOUOBBCUUBBCOUO
BOUCOOCUBCOOOCOBOCUO
UCCUUUOBCOCBCBUBUCOO
BUOBUCUCUOOBCOOUBUOO
...

correct output
38724

user output
97230

Test 7

Group: 2, 3, 4, 5, 6

Verdict:

input
20
CBGLSHGZHYZDWBNDBJUG
SMUXOJQYPXZDTMJUIWOJ
XIDSTNBGHKRKOVUVMINB
MTQGCFRUHQKALXRNCQGS
...

correct output
8334

user output
44571

Test 8

Group: 2, 3, 4, 5, 6

Verdict:

input
20
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
...

correct output
44100

user output
97230

Test 9

Group: 2, 3, 4, 5, 6

Verdict:

input
20
AAAAAAAAXAAAAAAAAAAA
AAAWAAAAAAAAAAAAAOAA
AAAAAAAAAAAAAAAAAPAA
AAAAAAAAKAAAAAAAAAAZ
...

correct output
18

user output
-456

Test 10

Group: 3, 4, 5, 6

Verdict:

input
50
GRGREEEGREGXRXXEGXXREXGRRRGRRR...

correct output
1584665

user output
3382575

Test 11

Group: 3, 4, 5, 6

Verdict:

input
50
AITIISJUHCCRZNKSDCNQKYSQRINFWJ...

correct output
1077746

user output
3238508

Test 12

Group: 3, 4, 5, 6

Verdict:

input
50
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO...

correct output
1625625

user output
3382575

Test 13

Group: 3, 4, 5, 6

Verdict:

input
50
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...

correct output
1680

user output
-32256

Test 14

Group: 4, 5, 6

Verdict:

input
100
NNCMDCDDCCNNNDNCMMNCDCDCCDCDNM...

correct output
25325366

user output
52030150

Test 15

Group: 4, 5, 6

Verdict:

input
100
LIMQQIHASECROEVILNVULGWZJPPKOG...

correct output
22342463

user output
52030150

Test 16

Group: 4, 5, 6

Verdict:

input
100
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT...

correct output
25502500

user output
52030150

Test 17

Group: 4, 5, 6

Verdict:

input
100
QXQQQQQQQQQQQQQQQQQQQQQQQQQQQQ...

correct output
25650

user output
-1557192

Test 18

Group: 5, 6

Verdict:

input
200
NAANANMMKNKKAKMKMAKNKMNKMMNNAA...

correct output
403292767

user output
816120300

Test 19

Group: 5, 6

Verdict:

input
200
OMYWATTLURKQPTKEFMGGYAOONXWVSC...

correct output
388111321

user output
816120300

Test 20

Group: 5, 6

Verdict:

input
200
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...

correct output
404010000

user output
816120300

Test 21

Group: 5, 6

Verdict:

input
200
LLLLLLLLLLLLLLLLLHLLLLLLLLLLLL...

correct output
14159445

user output
153721806

Test 22

Group: 6

Verdict:

input
500
VVHWVUHVHUWWWVUUUWVUUHUUWHWUVW...

correct output
15683003812

user output
1435979678

Test 23

Group: 6

Verdict:

input
500
OIMZGEQSBMBDSDXSWRFNKSGFEBBTJE...

correct output
15575906951

user output
1435979678

Test 24

Group: 6

Verdict:

input
500
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII...

correct output
15687562500

user output
1435979678

Test 25

Group: 6

Verdict:

input
500
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...

correct output
3058970930

user output
-1328797495