Submission #418954

#TimeUsernameProblemLanguageResultExecution timeMemory
418954jacquesamselRectangles (IOI19_rect)C++14
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
using namespace std;
#define vvint vector<vector<int>>

void print_vvint(vector<vector<int>>& grid) {
    for (int i = 0; i < grid.size(); i++) {
        for (int j = 0; j < grid[i].size(); j++) {
            cout << grid[i][j] << " ";
        }
        cout << endl;
    }
}

long long sumUp(int x) {
    long long accumulator = 0;
    for (int i = 1; i <= x; i++) {
        accumulator += i;
    }
    return accumulator;
}

bool is_valid(vvint& grid, int pos) {
    return min(min(grid[0][pos], grid[2][pos]), min(grid[1][pos-1], grid[1][pos+1])) > grid[1][pos];
}

bool can_add(vvint& grid, int rightPos, int maxRow) {
    maxRow = max(maxRow, grid[1][rightPos+1]);
    if (grid[1][rightPos+1] <= maxRow) return false;
    if (max(grid[0][rightPos], grid[2][rightPos]) <= grid[1][rightPos]) return false;
    return true;
}

long long count_rectangles(vector<vector<int>> a) {
    int n = a.size();
    int m = a[0].size();
    long long accumulator = 0;
    if (a[0].size() < 3) {
        return 0;
    }
    // cout << is_valid(a, 2) << endl;
    int leftPos = 1;
    int rightPos = 1;
    int maxRow = a[1][1];
    while (rightPos < m-1) {
        while (!is_valid(a, rightPos) && rightPos < m-2) {
            rightPos++;
            leftPos++;
        }
        while (can_add(a, rightPos, maxRow) && rightPos < m-2) {
            rightPos++;
            maxRow = max(maxRow, a[1][rightPos]);
        }
        // cout << "STRETCH: (" << leftPos<<"," << rightPos << ")" << endl;
        accumulator += sumUp(rightPos-leftPos+1);
        rightPos++;
        leftPos = rightPos;
    }
    return accumulator;
}

Compilation message (stderr)

rect.cpp: In function 'void print_vvint(std::vector<std::vector<int> >&)':
rect.cpp:6:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    6 |     for (int i = 0; i < grid.size(); i++) {
      |                     ~~^~~~~~~~~~~~~
rect.cpp:7:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    7 |         for (int j = 0; j < grid[i].size(); j++) {
      |                         ~~^~~~~~~~~~~~~~~~
rect.cpp: In function 'long long int count_rectangles(std::vector<std::vector<int> >)':
rect.cpp:34:9: warning: unused variable 'n' [-Wunused-variable]
   34 |     int n = a.size();
      |         ^
#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...