제출 #555421

#제출 시각아이디문제언어결과실행 시간메모리
555421MohamedFaresNebiliVision Program (IOI19_vision)C++14
18 / 100
1 ms224 KiB
#include <bits/stdc++.h>
#include "vision.h"
/// #pragma GCC optimize ("Ofast")
/// #pragma GCC target ("avx2")
/// #pragma GCC optimize("unroll-loops")
 
        using namespace std;
 
        using ll = long long;
        using ii = pair<ll, ll>;
        using vi = vector<int>;
 
        #define ff first
        #define ss second
        #define pb push_back
        #define all(x) (x).begin(), (x).end()
        #define lb lower_bound
        /// #define int ll
 
        const int oo = 1e9 + 7;
 
        int n, m; map<ii, int> vis;
        int calc(int x, int y) {
            return x * m + y;
        }
        int dist(int x, int y, int xx, int yy) {
            return abs(x - xx) + abs(y - yy);
        }
        void sample(int H, int W, int K) {
            n = H, m = W; vector<int> res;
            for(int l = 0; l < n; l++) {
                for(int i = 0; i < m; i++) {
                    for(int j = 0; j < n; j++) {
                        for(int k = 0; k < m; k++) {
                            int d = dist(l, i, j, k);
                            int a = calc(l, i), b = calc(j, k);
                            if(a > b) swap(a, b);
                            if(d == K && !vis.count({a, b})) {
                                res.pb(add_and({a, b}));
                                vis[{a, b}] = 1;
                            }
                        }
                    }
                }
            }
            add_or(res);
        }
 
        void construct_network(int H, int W, int K) {
            if(H == 2 && W == 3 && K == 3) {
                sample(H, W, K); return;
            }
            n = H, m = W; vector<int> res;
            int curr = n * n * m * m;
            if(curr < 10000) {
                sample(H, W, K); return;
            }
            for(int l = 0; l < n; l++) {
                for(int i = 0; i < m; i++) {
                    if(l + i == K) {
                        res.pb(add_and({0, calc(l, i)}));
                    }
                }
            }
            add_or(res);
        }
 
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...