제출 #847781

#제출 시각아이디문제언어결과실행 시간메모리
847781Essa2006The Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
714 ms17736 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define endl '\n'
#define FF first
#define SS second
#define all(a) a.begin(), a.end()
#define mod (ll)(1000000007)
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int n, m;
    cin>>n>>m;
    vector<vector<int>>A(n, vector<int>(m));
    int mn=1e9, mx=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>A[i][j];
            mn=min(mn, A[i][j]);
            mx=max(mx, A[i][j]);
        }
    }
    int l=0, r=1e9, ans;
    while(l<=r){
        int md=(l+r)/2;
        vector<vector<bool>>B(n, vector<bool>(m));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(mx-A[i][j]>md)
                    B[i][j]=1;
            }
        }
        bool can=0, cur;
        {
            cur=1;
            vector<vector<bool>>B2=B;
            for(int i=0;i<n && cur^can;i++){
                for(int j=m-1;j>=0 && cur^can;j--){
                    if(B2[i][j]){
                        if(A[i][j]-mn>md)
                            cur=0;
                        if(i!=n-1){
                            B2[i+1][j]=1;
                        }
                        if(j){
                            B2[i][j-1]=1;
                        }
                    }
                }
            }
            can|=cur;
        }
        {
            cur=1;
            vector<vector<bool>>B2=B;
            for(int i=0;i<n && cur^can;i++){
                for(int j=0;j<m && cur^can;j++){
                    if(B2[i][j]){
                        if(A[i][j]-mn>md)
                            cur=0;
                        if(i!=n-1){
                            B2[i+1][j]=1;
                        }
                        if(j!=m-1){
                            B2[i][j+1]=1;
                        }
                    }
                }
            }
            can|=cur;
        }
        {
            cur=1;
            vector<vector<bool>>B2=B;
            for(int i=n-1;i>=0 && cur^can;i--){
                for(int j=m-1;j>=0 && cur^can;j--){
                    if(B2[i][j]){
                        if(A[i][j]-mn>md)
                            cur=0;
                        if(i){
                            B2[i-1][j]=1;
                        }
                        if(j){
                            B2[i][j-1]=1;
                        }
                    }
                }
            }
            can|=cur;
        }
        {
            cur=1;
            vector<vector<bool>>B2=B;
            for(int i=n-1;i>=0 && cur^can;i--){
                for(int j=0;j<m && cur^can;j++){
                    if(B2[i][j]){
                        if(A[i][j]-mn>md)
                            cur=0;
                        if(i){
                            B2[i-1][j]=1;
                        }
                        if(j!=m-1){
                            B2[i][j+1]=1;
                        }
                    }
                }
            }
            can|=cur;
        }
        if(can)
            ans=md, r=md-1;
        else
            l=md+1;
    }
    cout<<ans<<endl;
}

컴파일 시 표준 에러 (stderr) 메시지

joioi.cpp: In function 'int main()':
joioi.cpp:4:14: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
    4 | #define endl '\n'
      |              ^~~~
joioi.cpp:22:21: note: 'ans' was declared here
   22 |     int l=0, r=1e9, ans;
      |                     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...