Submission #1297380

#TimeUsernameProblemLanguageResultExecution timeMemory
1297380haonkCultivation (JOI17_cultivation)C++20
0 / 100
1 ms832 KiB
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <vector>
#include <array>
#include <deque>
#include <list>
#include <forward_list>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <stack>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <bitset>
#include <tuple>
#include <optional>
#include <variant>
#include <cmath>
#include <cstdlib>
#include <cstdint>
#include <climits>
#include <limits>
#include <random>
#include <chrono>
#include <fstream>
#include <iterator>
#include <regex>
#include <type_traits>
#include <cctype>
#include <cstddef>

#define name "DISPERSAL"
#define ii pair<int,int>
#define se second 
#define fi first 

using namespace std;
using ll = long long;

const int inf = 1e9;

int mx[]={0,1,0,-1},
    my[]={1,0,-1,0};

const int N = 305;

int r,c,n;
ii Q[N];

bool ok(int x,int y){
    return x>0 and x<=r and y>0 and y<=c;
}

namespace sub1{

    bool a[5][5];

    int check[1<<17];

    int backtrack(int mask,int cur,int type=0){
        cout<<type<<'\n';
        cout<<bitset<12>(mask)<<" "<<cur<<'\n';
        for(int i=1;i<=r;++i){
            for(int j=1;j<=c;++j){
                cout<<a[i][j];
            }
            cout<<'\n';
        }
        cout<<'\n';

        if(mask==((1<<c*r)-1)) return cur;
        if(check[mask]!=inf) return check[mask];

        bool tmp[5][5];

        for(int i=1;i<=r;++i){
            for(int j=1;j<=c;++j){
                tmp[i][j] = a[i][j];
            }
        }

        for(int t=0;t<4;++t){
            for(int i=1;i<=r;++i){
                for(int j=1;j<=c;++j){
                    int x = i+mx[t],
                        y = j+my[t];

                    if(!ok(x,y))continue;

                    a[x][y] |= tmp[i][j];
                }
            }
            int premask=mask;
            for(int i=1;i<=r;++i){
                for(int j=1;j<=c;++j){
                    if(a[i][j]==1)premask |= (1<<((i-1)*c+j-1));
                }
            }

            if(mask!=premask) check[mask] = min(check[mask],backtrack(premask,cur+1,t));

            for(int i=1;i<=r;++i){
                for(int j=1;j<=c;++j){
                    a[i][j] = tmp[i][j];
                }
            }
        }

        return check[mask];
    }

    void solve(){
        for(int mask=0; mask<(1<<17); ++mask) check[mask]=inf;

        int mask = 0;
        for(int i=1;i<=n;++i){
            a[Q[i].fi][Q[i].se] = 1;

            mask |= (1<<((Q[i].fi-1)*c+Q[i].se-1));
        }

        cout<<backtrack(mask,0);
    }
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if(fopen(name".inp","r")){
        freopen(name".inp","r",stdin);
        freopen(name".out","w",stdout);
    }
    
    cin>>r>>c>>n;
    for(int i=1;i<=n;++i){
        cin>>Q[i].fi>>Q[i].se;
    }

    sub1::solve();
}

Compilation message (stderr)

cultivation.cpp: In function 'int main()':
cultivation.cpp:139:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  139 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
cultivation.cpp:140:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  140 |         freopen(name".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...