CSES - Datatähti 2025 alku - Results
Submission details
Task:Niitty
Sender:nikke5
Submission time:2024-11-10 22:31:00 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
#40
#50
#60
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#2ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#3ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#4ACCEPTED0.00 s1, 2, 3, 4, 5, 6details
#50.00 s1, 2, 3, 4, 5, 6details
#6ACCEPTED0.00 s2, 3, 4, 5, 6details
#7ACCEPTED0.01 s2, 3, 4, 5, 6details
#8ACCEPTED0.00 s2, 3, 4, 5, 6details
#9ACCEPTED0.00 s2, 3, 4, 5, 6details
#10ACCEPTED0.01 s3, 4, 5, 6details
#11ACCEPTED0.10 s3, 4, 5, 6details
#12ACCEPTED0.01 s3, 4, 5, 6details
#13ACCEPTED0.01 s3, 4, 5, 6details
#14ACCEPTED0.09 s4, 5, 6details
#15ACCEPTED0.75 s4, 5, 6details
#16ACCEPTED0.08 s4, 5, 6details
#17ACCEPTED0.73 s4, 5, 6details
#18--5, 6details
#19--5, 6details
#20--5, 6details
#21--5, 6details
#22--6details
#23--6details
#24--6details
#25--6details

Compiler report

input/code.cpp: In function 'std::vector<bool> findLettersFromRectOptimized(int, int, int)':
input/code.cpp:53:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int i = minX; i<FoundTracker.size(); i++){
      |                        ~^~~~~~~~~~~~~~~~~~~~
input/code.cpp:59:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<flower> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |         for (int f = 0; f<flist.size(); f++){
      |                         ~^~~~~~~~~~~~~
input/code.cpp:67:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |     if (maxX >= FoundTracker.size()){
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
input/code.cpp: In function 'int main...

Code

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <chrono>
#include <iomanip>
#include <algorithm>

typedef long long ll;
using namespace std;

struct flower{

    int x, y;

    int id;
};

vector<vector<flower>> flist;

vector<vector<bool>> FoundTracker;
bool FoundTrackerReset = true;

int idList[200] = {0};

int letterGrid[501][501];

// int iterations;

vector<bool> findLettersFromRect(int minX, int maxX, int minY, int maxY, int n){

    vector<bool> foundLetters = vector<bool>(flist.size(), false);

    for (int x = minX; x <= maxX; x++)
        {
            for (int y = minY; y <= maxY; y++)
            {
                foundLetters[letterGrid[x][y]] = true;
                // iterations++;
            }
        }

    return foundLetters;


}

vector<bool> findLettersFromRectOptimized(int minX, int maxX, int n){

    vector<bool> foundLetters = vector<bool>(flist.size(), false);
    for (int i = minX; i<FoundTracker.size(); i++){

        if (i > maxX){
            break;
        }

        for (int f = 0; f<flist.size(); f++){
            if(FoundTracker[i][f]){
                foundLetters[f] = true;
            }
            // iterations++;
        }
    }

    if (maxX >= FoundTracker.size()){

        FoundTracker.push_back(vector<bool>(flist.size(), false));

        for (int y = 0; y <= n - 1; y++)
        {
            foundLetters[letterGrid[maxX][y]] = true;
            FoundTracker[maxX][letterGrid[maxX][y]] = true;
            // iterations++;
        }
    }


    return foundLetters;


}


int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);

    fill_n(idList, 200, -1);

    int n;

    cin >> n;
    cin.ignore(1,'\n');

    int id = 0;
    vector<string> sI;

    for (int y = n-1; y>=0; y--){

        
        sI.push_back(string());
        getline(cin, sI[sI.size()-1]);

    }

    int c = n-1;

    for (int y = n - 1; y >= 0; y--)
    {
        
        string s = sI[c];

        c--;

        for (int x = 0; x < n; x++)
        {
            flower f;

            if (idList[(int)s[x]] == -1)
            {
                idList[(int)s[x]] = id;
                flist.push_back(vector<flower>());
                id++;
            }

            // f.id = idList[(int)s[x]];

            letterGrid[x][y] = idList[(int)s[x]];

            // iterations++;
        }
    }

    // vector<vector<char>> visualization;

    

    // for (int y = 0; y<n; y++){
    //     visualization.push_back(vector<char>());
    //     for(int x = 0; x<n; x++){
    //         visualization[y].push_back(sI[y][x]);
    //     }
    // }

    int v = 0;
    int maxMinYIteration = 501;
    int minMaxYIteration = 0;

    vector<pair<int,int>> goodRows;
    int biggestRectXDifference = 0;
    int biggestRectXDifferenceID = -1;

    for (int minX = 0; minX<n; minX++){ // Etsitään, onko eri pystyriveissä kaikki.
        for (int maxX = minX; maxX<n; maxX++){
            int notFound = flist.size();

            vector<bool> currentRectLetters;

            currentRectLetters = findLettersFromRectOptimized(minX, maxX, n);

            if (maxX-minX > biggestRectXDifference){
                biggestRectXDifference = maxX-minX;
                biggestRectXDifferenceID = goodRows.size();
            }

            for (int i = 0; i < flist.size(); i++)
            {
                if (currentRectLetters[i])
                {
                    notFound--;
                }
                // iterations++;
            }

            if (notFound == 0)
            {
                goodRows.push_back(make_pair(minX, maxX));
                // for (int y = 0; y <= n-1; y++)
                // {
                //     for (int x = minX; x <= maxX; x++)
                //     {
                //         cout << visualization[y][x] << " ";
                //     }
                //     cout << "\n";
                // }
                // cout << "\n";
            }
        }
    }

    for (int minY = 0; minY < min(n,maxMinYIteration); minY++) // LOOPPAA ENSIN ISOIN SUORAKULMA
    {

        for (int maxY = max(minY,minMaxYIteration); maxY < n; maxY++)
        {
            int notFound = flist.size();

            vector<bool> currentRectLetters;

            currentRectLetters = findLettersFromRect(goodRows[biggestRectXDifferenceID].first, goodRows[biggestRectXDifferenceID].second, minY, maxY, n);

            // for (int y = minY; y <= maxY; y++)
            // {
            //     for (int x = goodRows[biggestRectXDifferenceID].first; x <= goodRows[biggestRectXDifferenceID].second; x++)
            //     {
            //         cout << visualization[y][x] << " ";
            //     }
            //     cout << "\n";
            // }
            // cout << "\n";

            for (int i = 0; i < flist.size(); i++)
            {
                if (currentRectLetters[i])
                {
                    notFound--;
                }
                // iterations++;
            }

            if (notFound == 0)
            {
                v += n - maxY; // Jos tästä lähtien kaikista suorakulmista löytyy kaikki kirjaimet, lisää niiden määrä vastaukseen ja mene seuraavaan maxX iteraatioon.
                break;
            }
            else
            {
                if (maxY == n - 1 && maxMinYIteration == 501)
                {
                    maxMinYIteration = minY;
                    break;
                }
                if (minY == 0)
                {
                    minMaxYIteration = maxY + 1;
                }
            }
        }
    }

    for (int i = 0; i<goodRows.size(); i++){

        if (i == biggestRectXDifferenceID){
            continue;
        }

        for (int minY = 0; minY<min(n,maxMinYIteration); minY++){

            bool nextGoodRow = false;

            for(int maxY = max(minY,minMaxYIteration); maxY < n; maxY++){
                int notFound = flist.size();

                vector<bool> currentRectLetters;

                currentRectLetters = findLettersFromRect(goodRows[i].first, goodRows[i].second, minY, maxY, n);

                // for (int y = minY; y <= maxY; y++)
                // {
                //     for (int x = goodRows[i].first; x <= goodRows[i].second; x++)
                //     {
                //         cout << visualization[y][x] << " ";
                //     }
                //     cout << "\n";
                // }
                // cout << "\n";

                for (int i = 0; i < flist.size(); i++)
                {
                    if (currentRectLetters[i])
                    {
                        notFound--;
                    }
                    // iterations++;
                }

                if (notFound == 0)
                {
                    v += n - maxY; // Jos tästä lähtien kaikista suorakulmista löytyy kaikki kirjaimet, lisää niiden määrä vastaukseen ja mene seuraavaan maxX iteraatioon.

                    break;
                }
                else
                {
                    if (maxY == n - 1)
                    {
                        nextGoodRow = true;
                        break;
                    }
                }
            }

            if (nextGoodRow){
                break;
            }

        }
    }

    cout << v;

}

Test details

Test 1

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

Verdict: ACCEPTED

input
10
TNCTNPNTPC
NPPNTNTPTP
NTNTTCNTCT
NPCPNPPNTT
...

correct output
2035

user output
2035

Test 2

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

Verdict: ACCEPTED

input
10
NFWQLWNWYS
DZOQJVXFPJ
CNHXPXMCQD
QRTBVNLTQC
...

correct output
9

user output
9

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:

input
1
X

correct output
1

user output
0

Test 6

Group: 2, 3, 4, 5, 6

Verdict: ACCEPTED

input
20
BBCBUBOUOBBCUUBBCOUO
BOUCOOCUBCOOOCOBOCUO
UCCUUUOBCOCBCBUBUCOO
BUOBUCUCUOOBCOOUBUOO
...

correct output
38724

user output
38724

Test 7

Group: 2, 3, 4, 5, 6

Verdict: ACCEPTED

input
20
CBGLSHGZHYZDWBNDBJUG
SMUXOJQYPXZDTMJUIWOJ
XIDSTNBGHKRKOVUVMINB
MTQGCFRUHQKALXRNCQGS
...

correct output
8334

user output
8334

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

input
20
AAAAAAAAXAAAAAAAAAAA
AAAWAAAAAAAAAAAAAOAA
AAAAAAAAAAAAAAAAAPAA
AAAAAAAAKAAAAAAAAAAZ
...

correct output
18

user output
18

Test 10

Group: 3, 4, 5, 6

Verdict: ACCEPTED

input
50
GRGREEEGREGXRXXEGXXREXGRRRGRRR...

correct output
1584665

user output
1584665

Test 11

Group: 3, 4, 5, 6

Verdict: ACCEPTED

input
50
AITIISJUHCCRZNKSDCNQKYSQRINFWJ...

correct output
1077746

user output
1077746

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

input
50
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...

correct output
1680

user output
1680

Test 14

Group: 4, 5, 6

Verdict: ACCEPTED

input
100
NNCMDCDDCCNNNDNCMMNCDCDCCDCDNM...

correct output
25325366

user output
25325366

Test 15

Group: 4, 5, 6

Verdict: ACCEPTED

input
100
LIMQQIHASECROEVILNVULGWZJPPKOG...

correct output
22342463

user output
22342463

Test 16

Group: 4, 5, 6

Verdict: ACCEPTED

input
100
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT...

correct output
25502500

user output
25502500

Test 17

Group: 4, 5, 6

Verdict: ACCEPTED

input
100
QXQQQQQQQQQQQQQQQQQQQQQQQQQQQQ...

correct output
25650

user output
25650

Test 18

Group: 5, 6

Verdict:

input
200
NAANANMMKNKKAKMKMAKNKMNKMMNNAA...

correct output
403292767

user output
(empty)

Test 19

Group: 5, 6

Verdict:

input
200
OMYWATTLURKQPTKEFMGGYAOONXWVSC...

correct output
388111321

user output
(empty)

Test 20

Group: 5, 6

Verdict:

input
200
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...

correct output
404010000

user output
(empty)

Test 21

Group: 5, 6

Verdict:

input
200
LLLLLLLLLLLLLLLLLHLLLLLLLLLLLL...

correct output
14159445

user output
(empty)

Test 22

Group: 6

Verdict:

input
500
VVHWVUHVHUWWWVUUUWVUUHUUWHWUVW...

correct output
15683003812

user output
(empty)

Test 23

Group: 6

Verdict:

input
500
OIMZGEQSBMBDSDXSWRFNKSGFEBBTJE...

correct output
15575906951

user output
(empty)

Test 24

Group: 6

Verdict:

input
500
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII...

correct output
15687562500

user output
(empty)

Test 25

Group: 6

Verdict:

input
500
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...

correct output
3058970930

user output
(empty)