제출 #1348013

#제출 시각아이디문제언어결과실행 시간메모리
1348013simona_2010삶의 질 (IOI10_quality)C++20
0 / 100
1 ms836 KiB
#include "quality.h"
#include <bits/stdc++.h>
using namespace std;
int c[3001][3001], pref[3001][3001];
int r1, c1, h1, w1;
int q[3001][3001];
bool check(int x)
{
    int a, b;
    for(int i = 1; i <= r1; i++)
    {
        for(int j = 1; j <= c1; j++)
        {
            if(q[i][j] <= x)c[i][j] = 0;
            else c[i][j] = 1;
            if(q[i][j] == x)
            {
                a = i;
                b = j;
            }
        }
    }
    for(int i = 1; i <= r1; i++)
    {
        for(int j = 1; j <= c1; j++)
        {
            pref[i][j] = pref[i-1][j] + pref[i][j-1] - pref[i-1][j-1] + c[i][j];
        }
    }
    for(int i = h1; i <= r1; i++)
    {
        for(int j = w1; j <= c1; j++)
        {
            int cnt = pref[i][j] - pref[i-h1][j] - pref[i][j-w1] + pref[i-h1][j-w1];
            ///cout << x << " " << i << " " << j << " " << cnt << endl;
            if(cnt == h1*w1/2 && i-a >= 0 && i-a < h1 && j-b >= 0 && j-b < w1)
                return true;
        }
    }
    return false;
}
int rectangle(int R, int C, int H, int W, int Q[3001][3001])
{
    int l = 1, r = R*C;
    r1 = R;
    c1 = C;
    h1 = H;
    w1 = W;
    for(int i = 0; i < R; i++)
    {
        for(int j = 0; j < C; j++)
        {
            q[i+1][j+1] = Q[i][j];
        }
    }
    while(l <= r)
    {
        int mid = (l+r)/2;
        if(check(mid))r = mid-1;
        else l = mid+1;
    }
    return l;
}
#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...