답안 #226748

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
226748 2020-04-25T06:31:58 Z Theo830 Colouring a rectangle (eJOI19_colouring) C++17
10 / 100
131 ms 13268 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll INF = 1e9+7;
ll MOD = 998244353;
typedef pair<ll,ll> ii;
#define iii pair<ii,ll>
#define f(i,a,b) for(long long i = a;i < b;i++)
#define rf(i,a,b) for(long long i=a;i>=b;i--)
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define w(t) while(t--)
#define c(n); cin>>n;
#define p(n) cout<<n;
#define pl(n) cout<<n<<"\n";
#define ps(n); cout<<n<<" ";
#define F first
#define S second
#define pb(a) push_back(a)
#define all(x) (x).begin(), (x).end()
#define ull unsigned long long
#define vll vector<ll>
#define vii vector<ii>
#define mkp make_pair
#define ld long double
#define arrin(a,n) f(i,0,n){cin>>a[i];}
#define arrout(a,n) f(i,0,n){cout<<a[i]<<" ";}
#define printclock cerr<<"Time : "<<1000*(ld)clock()/(ld)CLOCKS_PER_SEC<<"ms\n";
#define PI (2*acos(0))
const long long N = 1e6+5;
vll visit,dist,taken;
vector<vll> adj;
vector<vii> adj2;
priority_queue<ii,vector<ii>, greater<ii> > pq;
ll bit[N]={0};
ll siz;
ll res = 0;
ll lcm(ll a,ll b){return (a * b) / __gcd(a,b);}
ll gcd(ll a,ll b){return __gcd(a,b);}
ll power(ll a,ll b){if(b == 0)return 1;if(b == 1)return a;ll ans = power(a,b/2) % MOD;ans *= ans;ans %= MOD;if(b % 2 == 1)ans *= a;return ans%MOD;}
ll inverse(ll x){x%=MOD;return power(x,MOD-2);}
void BITup(ll k, ll x){while(k <= siz){bit[k]+=x;k += k & -k;}}
ll BITq(ll k){ll s=0;while(k>=1){s+=bit[k];k -= k &-k;}return s;}
struct node{ll lazy,val;}seg[4000000];
struct point{ll x,y;};
void dfs(ll v){visit[v] = 1;for(auto x:adj[v]){if(!visit[x])dfs(x);}}
void bfs(ll s){visit[s] = 1;queue<ll>q;q.push(s);while(!q.empty()){ll u = q.front();ps(u);q.pop();for(auto x:adj[u]){if(!visit[x]){visit[x] = 1;q.push(x);}}}}
void dijkstra(ll s){pq.push(ii(0,s));dist[s] = 0;while(!pq.empty()){ii f = pq.top();pq.pop();ll w = f.F;ll u = f.S;if(w > dist[u]){continue;}for(auto v:adj2[u]){if(dist[u] + v.S < dist[v.F]){dist[v.F] = dist[u] + v.S;pq.push(ii(dist[v.F],v.F));}}}}
void prim(ll edge) {taken[edge] = 1;for(auto v:adj2[edge]) {if (taken[v.first]==0)pq.push(ii(v.second, v.first));}}
ll mst(ll s){taken.assign(N, 0);prim(s);ll cost = 0;while(!pq.empty()){ii front = pq.top();pq.pop();ll w = front.first;ll u = front.second;if(taken[u]==0)cost += w;prim(u);}return cost;}
void YESNO(ll a){if(!!a){pl("Yes");}else{pl("No");}}
void filesin(void){freopen("tracing.in","r",stdin);}
void filesout(void){freopen("tracing.out","w",stdout);}
///I hope I will get uprating and don't make mistakes
///I will never stop programming
///sqrt(-1) Love C++
///Please don't hack me
///@TheofanisOrfanou Theo830
///Training
int main(void){
    fastio;
    ll m,n;
    c(m);
    c(n);
    ll siz = m+n-1;
    ll arr1[siz],arr2[siz];
    ll ans = INF;
    arrin(arr1,siz);
    arrin(arr2,siz);
    if(m == 1){
        ans = 0;
        f(i,0,siz){
            ans += min(arr1[i],arr2[siz-i-1]);
        }
        pl(ans);
    }
    else{
        swap(n,m);
        ll s = siz*2;
        f(i,0,(1LL<<s)){
            ll res = 0;
            ll arr[n][m];
            ll ek = 0;
            f(k,0,n){
                f(kk,0,m){
                    arr[k][kk] = 0;
                }
            }
            f(j,0,siz){
                if((i & (1LL<<j)) != 0){
                    res += arr1[j];
                    ll se = min(j,n-1),ss = m-1;
                    if(j > n-1){
                        ss -= j - n + 1;
                    }
                    while(min(se,ss) >= 0){
                        if(arr[se][ss] != 1){
                            arr[se][ss]++;
                            ek++;
                        }
                        se--;
                        ss--;
                    }
                }
            }
            f(j,siz,s){
                if((i & (1LL<<j)) != 0){
                    res += arr2[j-siz];
                    ll se = min(j-siz,n-1),ss = 0;
                    if(j-siz > n-1){
                        ss += j - siz - n + 1;
                    }
                    while(se >= 0 && ss <= m-1){
                        if(arr[se][ss] != 1){
                            arr[se][ss]++;
                            ek++;
                        }
                        se--;
                        ss++;
                    }
                }
            }
            if(ek == n * m){
                ans = min(ans,res);
            }
        }
        pl(ans);
    }
}

Compilation message

colouring.cpp: In function 'void filesin()':
colouring.cpp:51:27: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
 void filesin(void){freopen("tracing.in","r",stdin);}
                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
colouring.cpp: In function 'void filesout()':
colouring.cpp:52:28: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
 void filesout(void){freopen("tracing.out","w",stdout);}
                     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Incorrect 7 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Incorrect 7 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Incorrect 7 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Incorrect 7 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 62 ms 3492 KB Output is correct
2 Correct 68 ms 3480 KB Output is correct
3 Correct 63 ms 3448 KB Output is correct
4 Correct 62 ms 3448 KB Output is correct
5 Correct 68 ms 3448 KB Output is correct
6 Correct 57 ms 3448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 131 ms 13268 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Incorrect 7 ms 384 KB Output isn't correct
4 Halted 0 ms 0 KB -