제출 #419033

#제출 시각아이디문제언어결과실행 시간메모리
419033JediMaster11Rectangles (IOI19_rect)C++17
37 / 100
5034 ms24660 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 (val >= grid[y][j1 - 1] || val >= grid[y][j2 + 1] || val >= grid[i1 - 1][x] || val >= grid[i2 + 1][x])
                            {

                                works = false;
                            }

                            if (!works)
                            {
                                x = j2+1;
                                y = i2+1;
                                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...