Submission #419022

#TimeUsernameProblemLanguageResultExecution timeMemory
419022JediMaster11Rectangles (IOI19_rect)C++17
0 / 100
5013 ms25476 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define vint vector<int>
#define vll vector<long long>
#define fo(a, b, c) for (int a = b; a < (int)c; a++)
#define rfo(a, b, c) for (int a = b - 1; a >= (int)c; a--)
#define print(x) cout << x << "\n"

ll count_rectangles(vector<vint> grid)
{
    int n = grid.size();
    int m = grid[0].size();
    bool done[n][m]; // ignore when done=true

    int max;

    // if its smaller than a side piece, ignore it in bool array
    // tallest in any row or grid can be ignored
    fo(i, 0, n)
    {
        max = -1;
        fo(j, 0, m)
        {
            if (grid[i][j] > max)
            {
                max = grid[i][j];
            }
        }
        fo(j, 0, m)
        {
            if (grid[i][j] == max)
            {
                done[i][j] = true;
            }
        }

        done[i][0] = true;
        done[i][m - 1] = true;

        if (grid[i][0] <= grid[i][1])
        {
            done[i][1] = true;
        }
        if (grid[i][m - 1] <= grid[i][m - 2])
        {
            done[i][m - 2] = true;
        }
    }

    fo(j, 0, m)
    {
        max = -1;
        // pos = -1;
        fo(i, 0, n)
        {
            if (grid[i][j] > max)
            {
                max = grid[i][j];
                // pos = i;
            }
        }

        fo(i, 0, n)
        {
            if (grid[i][j] == max)
            {
                done[i][j] = true;
            }
        }

        done[0][j] = true;
        done[n - 1][j] = true;

        if (grid[0][j] <= grid[1][j])
        {
            done[1][j] = true;
        }
        if (grid[n - 1][j] <= grid[n - 2][j])
        {
            done[n - 2][j] = true;
        }
    }
    ll count = 0;

    // vector<pair<int,int>> works;

    // fo(i,1,n-1){
    //     fo(j,1,m-1){
    //         if(!done[i][j]){

    //             int val = grid[i][j];

    //             if(val < grid[i][j+1] && val < grid[i][j-1] && val < grid[i+1][j] && val < grid[i-1][j]){

    //                 works.push_back({i,j});

    //             }
    //         }
    //     }
    // }
    // count = works.size();

    fo(i1, 1, n - 1)
    {
        fo(j1, 1, m - 1)
        {

            fo(i2, i1, n - 1)
            {
                fo(j2, j1, m - 1)
                {

                    bool works = true;

                    fo(y, i1, i2 + 1)
                    {
                        fo(x, j1, j2 + 1)
                        {
                            // int val = grid[y][x];
                            if (done[y][x])
                            {
                                works = false;
                            }
                            if (!(grid[y][x] < grid[y][j1 - 1] && grid[y][x] < grid[y][j2 + 1]))
                            {

                                works = false;
                            }
                            else if (!(grid[y][x] < grid[i1 - 1][x] && grid[y][x] < grid[i2 + 1][x]))
                            {

                                works = false;
                            }

                            if (!works)
                            {
                                break;
                            }
                        }
                        if (!works)
                        {
                            break;
                        }
                    }
                    if (works)
                    {
                        count++;
                        // print(i1 << " -> " << i2);
                        // print(j1 << " -> " << j2);
                        // print("");
                    }
                }
            }
        }
    }

    return count;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...