Submission #603201

# Submission time Handle Problem Language Result Execution time Memory
603201 2022-07-23T16:58:25 Z definitelynotmee Rectangles (IOI19_rect) C++17
23 / 100
594 ms 196316 KB
#include "rect.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename T> using matrix = vector<vector<T>>;
#define ff first
#define ss second
#define all(x) x.begin(), x.end()

struct cebola{
    int pai, minx, maxx, miny, maxy, sz;
};

long long count_rectangles(std::vector<std::vector<int> > a) {
	
    int n = a.size(), m = a[0].size();
    int tot = n*m;
    int resp = 0;

    if(n > 3){
        vector<cebola> v(tot);

        for(int i = 0; i < tot; i++){
            v[i] = {i,i%m,i%m,i/m,i/m,1};
        }
        auto find =[&](int id, auto find){
            if(v[id].pai == id)
                return id;
            return v[id].pai = find(v[id].pai,find);
        };

        auto onion =[&](int a, int b){
            a= find(a,find);
            b = find(b,find);
            if(a == b)
                return;
            v[a].pai = b;
            v[b].minx = min(v[b].minx,v[a].minx);
            v[b].miny = min(v[b].miny,v[a].miny);
            v[b].maxx = max(v[b].maxx,v[a].maxx);
            v[b].maxy = max(v[b].maxy,v[a].maxy);
            v[b].sz+=v[a].sz;
        };

        int dx[]{1,0,-1,0}, dy[]{0,1,0,-1};
        for(int i = 0; i < tot; i++){
            int x = i%m, y = i/m;
            for(int j = 0; j < 4; j++){
                int xi = x + dx[j], yi = y+ dy[j];
                if(xi < 0 || xi >= m || yi < 0 || yi >= n){
                    continue;
                }
                int id = yi*m+xi;
                // cout << dx[j] << ' ' << dy[j] << '\n';
                // cout << "->" << i << ' '<< x << ' ' << y << " <=> " << id << ' ' <<xi << ' ' << yi << '\n';
                if(a[y][x] == 0 && a[yi][xi] == 0)
                    onion(i,id) ;
            }
        }
        

        for(int i = 0; i < tot; i++){
            int x = i%m, y = i/m;
            if(a[y][x] != 0 || v[i].pai != i)
                continue;
            // cout << x << ' ' << y << '\n';
            // cout << v[i].minx << ' ' << v[i].maxx << ' ' << v[i].miny << ' ' << v[i].maxy << '\n';
            if(v[i].maxx == m-1 || v[i].minx == 0 || v[i].miny == 0 || v[i].maxy == n-1)
                continue;
            //cout << x << ' ' << y << '\n';
            if((v[i].maxx-v[i].minx+1)*(v[i].maxy-v[i].miny+1) == v[i].sz)
                resp++;
        }
    } else {
        if(n <= 2 || m <= 2)
            return 0;
        
        for(int i = 1; i < m-1; i++){
            int maxrange = -1, okcol = 1;
            for(int j = i; j < m-1 && okcol; j++){
                maxrange = max(maxrange,a[1][j]);
                okcol&=a[1][j] < a[0][j] && a[1][j] < a[2][j];
                //cout << i << ' ' << j << "=>"  << maxrange << ' ' << okcol << '\n';
                if(okcol && maxrange < a[1][i-1] && maxrange < a[1][j+1])
                    resp++;
            }
        }
    }
    

    return resp;
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 364 KB Output is correct
2 Correct 4 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 308 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 223 ms 90060 KB Output is correct
3 Correct 465 ms 195168 KB Output is correct
4 Correct 458 ms 196172 KB Output is correct
5 Correct 484 ms 196232 KB Output is correct
6 Correct 286 ms 97024 KB Output is correct
7 Correct 569 ms 184144 KB Output is correct
8 Correct 594 ms 196316 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -