CSES - Datatähti 2025 alku - Results
Submission details
Task:Niitty
Sender:Chenran
Submission time:2024-11-10 18:53:09 +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
#3ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#4ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#5ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#60.00 s2, 3, 4, 5, 6details
#70.00 s2, 3, 4, 5, 6details
#8ACCEPTED0.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
#12ACCEPTED0.00 s3, 4, 5, 6details
#130.00 s3, 4, 5, 6details
#140.00 s4, 5, 6details
#150.01 s4, 5, 6details
#16ACCEPTED0.01 s4, 5, 6details
#170.00 s4, 5, 6details
#180.01 s5, 6details
#190.01 s5, 6details
#20ACCEPTED0.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, map<char, int> &line) {
    map<char, int> answer;
    for (auto &p : total) {
        int diff = p.second - line[p.first];
        if (diff > 0) {
            answer[p.first] = diff;
        }
    }
    return answer;
}

int 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> rows[n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            rows[i][grid[i][j]]++;
        }
    }

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

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

    map<char, int> temp;
    temp = total;
    int down_index = 0;
    while (down_index < n && temp.size() == total.size())
    {
        temp = sub_count(temp, rows[down_index++]);
    }

    temp = total;
    int up_index = n - 1;
    while (up_index >= 0 && temp.size() == total.size())
    {
        temp = sub_count(temp, rows[up_index--]);
    }

    temp = total;
    int right_index = 0;
    while (right_index < n && temp.size() == total.size())
    {
        temp = sub_count(temp, cols[right_index++]);
    }

    temp = total;
    int left_index = n - 1;
    while (left_index >= 0 && temp.size() == total.size())
    {
        temp = sub_count(temp, cols[left_index--]);
    }

    int total_comb = combination_count(n, n);

    int u = combination_count(up_index + 1, n);
    int l = combination_count(left_index + 1, n);
    int d = combination_count(n - down_index, n);
    int r = combination_count(n - right_index, n);

    // cout << right_index << " " << left_index << endl;

    int ul = combination_count(up_index + 1, left_index + 1);
    int ud = combination_count(left_index - right_index + 1, n);
    int ur = combination_count(up_index + 1, n - right_index);
    int ld = combination_count(n - down_index, left_index + 1);
    int lr = combination_count(up_index - down_index + 1, n);
    int dr = combination_count(n - down_index, n - right_index);

    int um = combination_count(left_index - right_index + 1, up_index + 1);
    int lm = combination_count(up_index - down_index + 1, left_index + 1);
    int dm = combination_count(left_index - right_index + 1, n - down_index);
    int rm = combination_count(up_index - down_index + 1, n - right_index);

    int c = combination_count(left_index - right_index + 1, up_index - down_index + 1);

    // cout << u << " " << l << " " << d << " " << r << endl;
    // cout << ul << " " << ud << " " << ur << " " << ld << " " << lr << " " << dr << endl;
    // cout << um << " " << lm << " " << dm << " " << rm << endl;
    // cout << c << endl;

    int result = total_comb - (u + l + d + r) + (ul + ud + ur + ld + lr + dr) - (um + lm + dm + rm) + c;

    cout << result << 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
3025

Test 2

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

Verdict:

input
10
NFWQLWNWYS
DZOQJVXFPJ
CNHXPXMCQD
QRTBVNLTQC
...

correct output
9

user output
12

Test 3

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

Verdict: ACCEPTED

input
10
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
...

correct output
3025

user output
3025

Test 4

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

Verdict: ACCEPTED

input
10
FFFFFFFFFF
FFFFFCFFFF
FFFFFFJFFF
FFFFFFFFFF
...

correct output
12

user output
12

Test 5

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

Verdict: ACCEPTED

input
1
X

correct output
1

user output
1

Test 6

Group: 2, 3, 4, 5, 6

Verdict:

input
20
BBCBUBOUOBBCUUBBCOUO
BOUCOOCUBCOOOCOBOCUO
UCCUUUOBCOCBCBUBUCOO
BUOBUCUCUOOBCOOUBUOO
...

correct output
38724

user output
44100

Test 7

Group: 2, 3, 4, 5, 6

Verdict:

input
20
CBGLSHGZHYZDWBNDBJUG
SMUXOJQYPXZDTMJUIWOJ
XIDSTNBGHKRKOVUVMINB
MTQGCFRUHQKALXRNCQGS
...

correct output
8334

user output
30609

Test 8

Group: 2, 3, 4, 5, 6

Verdict: ACCEPTED

input
20
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
KKKKKKKKKKKKKKKKKKKK
...

correct output
44100

user output
44100

Test 9

Group: 2, 3, 4, 5, 6

Verdict:

input
20
AAAAAAAAXAAAAAAAAAAA
AAAWAAAAAAAAAAAAAOAA
AAAAAAAAAAAAAAAAAPAA
AAAAAAAAKAAAAAAAAAAZ
...

correct output
18

user output
24

Test 10

Group: 3, 4, 5, 6

Verdict:

input
50
GRGREEEGREGXRXXEGXXREXGRRRGRRR...

correct output
1584665

user output
1625625

Test 11

Group: 3, 4, 5, 6

Verdict:

input
50
AITIISJUHCCRZNKSDCNQKYSQRINFWJ...

correct output
1077746

user output
1617983

Test 12

Group: 3, 4, 5, 6

Verdict: ACCEPTED

input
50
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO...

correct output
1625625

user output
1625625

Test 13

Group: 3, 4, 5, 6

Verdict:

input
50
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...

correct output
1680

user output
3024

Test 14

Group: 4, 5, 6

Verdict:

input
100
NNCMDCDDCCNNNDNCMMNCDCDCCDCDNM...

correct output
25325366

user output
25502500

Test 15

Group: 4, 5, 6

Verdict:

input
100
LIMQQIHASECROEVILNVULGWZJPPKOG...

correct output
22342463

user output
25502500

Test 16

Group: 4, 5, 6

Verdict: ACCEPTED

input
100
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT...

correct output
25502500

user output
25502500

Test 17

Group: 4, 5, 6

Verdict:

input
100
QXQQQQQQQQQQQQQQQQQQQQQQQQQQQQ...

correct output
25650

user output
150696

Test 18

Group: 5, 6

Verdict:

input
200
NAANANMMKNKKAKMKMAKNKMNKMMNNAA...

correct output
403292767

user output
404010000

Test 19

Group: 5, 6

Verdict:

input
200
OMYWATTLURKQPTKEFMGGYAOONXWVSC...

correct output
388111321

user output
404010000

Test 20

Group: 5, 6

Verdict: ACCEPTED

input
200
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...

correct output
404010000

user output
404010000

Test 21

Group: 5, 6

Verdict:

input
200
LLLLLLLLLLLLLLLLLHLLLLLLLLLLLL...

correct output
14159445

user output
151406637

Test 22

Group: 6

Verdict:

input
500
VVHWVUHVHUWWWVUUUWVUUHUUWHWUVW...

correct output
15683003812

user output
655176964

Test 23

Group: 6

Verdict:

input
500
OIMZGEQSBMBDSDXSWRFNKSGFEBBTJE...

correct output
15575906951

user output
655176964

Test 24

Group: 6

Verdict:

input
500
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII...

correct output
15687562500

user output
655176964

Test 25

Group: 6

Verdict:

input
500
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...

correct output
3058970930

user output
-1015610060