답안 #530716

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
530716 2022-02-26T14:44:10 Z browntoad The Kingdom of JOIOI (JOI17_joioi) C++14
0 / 100
1 ms 324 KB
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast", "unroll-loops")
using namespace std;
#define ll long long
#define int ll
#define FOR(i,a,b) for (int i = (a); i<(b); i++)
#define REP(i,n) FOR(i,0,n)
#define REP1(i,n) FOR(i,1,n+1)
#define RREP(i,n) for (int i=(n)-1; i>=0; i--)
#define f first
#define s second
#define pb push_back
#define ALL(x) x.begin(),x.end()
#define SZ(x) (int)(x.size())
#define SQ(x) (x)*(x)
#define pii pair<int, int>
#define pdd pair<double ,double>
#define pcc pair<char, char> 
#define endl '\n'
//#define TOAD
#ifdef TOAD
#define bug(x) cerr<<__LINE__<<": "<<#x<<" is "<<x<<endl
#define IOS()
#else
#define bug(...)
#define IOS() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#endif

const ll inf = (1ll<<60);
const int iinf=2147483647;
const ll mod = 1e9+7;
const ll maxn=2005;
const double PI=acos(-1);

ll pw(ll x, ll p, ll m=mod){
    ll ret=1;
    while (p>0){
        if (p&1){
            ret*=x;
            ret%=m;
        }
        x*=x;
        x%=m;
        p>>=1;
    }
    return ret;
}

ll inv(ll a, ll m=mod){
    return pw(a,m-2);
}
int a[4][maxn][maxn];
signed main(){
    IOS();
    int h,w; cin>>h>>w;
    REP(i,h){
        REP(j,w){
            cin>>a[0][i][j];
            a[1][j][i]=a[0][i][j];
            a[2][i][j]=a[0][h-i-1][w-j-1];
            a[3][j][i]=a[1][w-j-1][h-i-1];
        }
    }
    /*REP(id, 4){
        if (id%2) swap(h, w);
        REP(i,h){
            REP(j,w){
                cout<<a[id][i][j]<<' ';
            }
            cout<<endl;
        }
        if (id%2) swap(h, w);
        cout<<endl;
    }
    */
    int ans=inf;
    REP(id, 4){
        int l=0, r=mod;
        while(l<=r){
            if (l==r){
                ans=min(ans, l);
                break;
            }
            int mid=(l+r)/2;
            bool gg=false;
            int acmx=0, acmn=inf, bcmx=0, bcmn=inf;
            int prevd=h;
            REP(i,w){
                int k=-1;
                while(k+1<h&&max(acmx, a[id][k+1][i])-min(acmn, a[id][k+1][i])<=mid){
                    k++;
                    acmx=max(acmx, a[id][k][i]);
                    acmn=min(acmn, a[id][k][i]);
                }
                k=min(k, prevd);
                //cout<<k<<endl;
                //cout<<acmx<<' '<<acmn<<endl;
                FOR(j, k+1, h){
                    bcmx=max(bcmx, a[id][j][i]);
                    bcmn=min(bcmn, a[id][j][i]);
                }
                if (bcmx-bcmn>mid){
                    gg=1;
                    break;
                }
            }
            if (gg){
                l=mid+1;
            }
            else {
                r=mid;
            }
        }
    }
    cout<<ans<<endl;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 324 KB Output isn't correct
2 Halted 0 ms 0 KB -