답안 #582166

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
582166 2022-06-23T13:13:08 Z TimDee Colouring a rectangle (eJOI19_colouring) C++14
0 / 100
142 ms 102400 KB
#include <bits/stdc++.h>
using namespace std;

#define paiu return
#define moment 0;
 
#define int long long
#define ll long long
 
#define forn(i,x) for (int i=0; i<x; i++)
 
#define vi(a,n) vector<int> a(n,0)
 
//cringe define
#define vii(a,n) vi(a,n); forn(i,n) cin>>a[i];
vector<int> ___makeprefsum(vector<int>&a) {
    int n=a.size();
    vi(pr,n+1);
    forn(i,n) pr[i+1]=pr[i]+a[i];
    return pr;
}
#define prefsum(pr,a) vector<int> pr=___makeprefsum(a);

#define all(v) v.begin(),v.end()

#define rall(v) v.rbegin(),v.rend()
 
#define pb(x) push_back(x)
#define pf pop_front();
#define last(c) c[c.size()-1]
 
#define f first
#define s second
 
#define pi pair<int, int>
#define mp(x,y) make_pair(x, y)
 
const ll mod = 1000000007;
const double ppi = acos(0) * 2;
     
//const int maxn = 3e5+1;
const int inf = INT_MAX;
const ll linf = LLONG_MAX;
const ll mmod = 998244353;

struct node {

    int sz=0,cost=0;
    vector<vector<int>> a;

};

vector<node> v;
int n,m;

void bruteforce(vector<int>&a, vector<int>&b, node N, int i) {

    if (i==n+m-1+n+m-1) {
        v.pb(N);
        return;
    }

    bruteforce(a,b,N,i+1);
    if (i>=n+m-1) {
        //work with B
        N.cost+=b[i-n-m+1];
        if (i-n-m+1>=n) {
            //work with Bottom
            int y=i-n-m+1-n+1;
            int x=n-1;
            while (x>=0 && y<m) {
                N.sz+=1-N.a[x][y];
                N.a[x][y]=1;
                x--,y++;
            }
        } else {
            //work with Left
            int y=0;
            int x=i-n-m+1;
            while (x>=0 && y<m) {
                N.sz+=1-N.a[x][y];
                N.a[x][y]=1;
                x--,y++;
            }
        }
    } else {
        //work with A
        N.cost+=a[i];
        if (i<m) {
            //work with Top
            int y=m-1-i;
            int x=0;
            while (x<n && y<m) {
                N.sz+=1-N.a[x][y];
                N.a[x][y]=1;
                x++,y++;
            }
        } else {
            //work with Left
            int y=0;
            int x=i-m+1;
            while (x<n && y<m) {
                N.sz+=1-N.a[x][y];
                N.a[x][y]=1;
                x++,y++;
            }
        }
    }
    bruteforce(a,b,N,i+1);

}

void solve() {
    
    cin>>n>>m;

    if (m==1) {
        int ans=0;
        //vii(a,n);
        //vii(b,n);
        //forn(i,n) ans+=min(a[i],b[])
        cout<<ans;
        return;
    }

    vii(md,m+n-1);
    vii(pd,m+n-1);

    node zero;
    zero.a.resize(n);
    forn(i,n) zero.a[i].assign(m,0);
    bruteforce(md,pd,zero,0);
    int ans=linf;

    forn(i,v.size()) {

        //cout<<v[i].sz<<' '<<v[i].cost<<'\n';
        //forn(j,n) {
        //    forn(k,m) cout<<v[i].a[j][k]<<' ';
        //    cout<<'\n';
        //}
        //cout<<'\n';

    }

    forn(i,v.size()) if (v[i].sz==n*m) {
        if (ans>v[i].cost) {
            ans=v[i].cost;
            //forn(j,n) {
            //    forn(k,m) cout<<v[i].a[j][k]<<' ';
            //    cout<<'\n';
            //}
            //cout<<"! ";
            //forn(j,v[i].used.size()) cout<<v[i].used[j]<<' '; cout<<'\n';
            //cout<<'\n';
        }
    }
    cout<<ans;

}

int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    //init_primes();
    
    int t=1;
    //cin>>t;
    
    while(t--) solve();
    
    paiu moment
}

Compilation message

colouring.cpp: In function 'void solve()':
colouring.cpp:10:34: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<node>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 | #define forn(i,x) for (int i=0; i<x; i++)
......
  135 |     forn(i,v.size()) {
      |          ~~~~~~~~~~               
colouring.cpp:135:5: note: in expansion of macro 'forn'
  135 |     forn(i,v.size()) {
      |     ^~~~
colouring.cpp:10:34: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<node>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 | #define forn(i,x) for (int i=0; i<x; i++)
......
  146 |     forn(i,v.size()) if (v[i].sz==n*m) {
      |          ~~~~~~~~~~               
colouring.cpp:146:5: note: in expansion of macro 'forn'
  146 |     forn(i,v.size()) if (v[i].sz==n*m) {
      |     ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1392 KB Output is correct
3 Correct 12 ms 5772 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1392 KB Output is correct
3 Correct 12 ms 5772 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1392 KB Output is correct
3 Correct 12 ms 5772 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1392 KB Output is correct
3 Correct 12 ms 5772 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 80 ms 102400 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 142 ms 102400 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 3 ms 1392 KB Output is correct
3 Correct 12 ms 5772 KB Output is correct
4 Incorrect 0 ms 212 KB Output isn't correct
5 Halted 0 ms 0 KB -