제출 #555430

#제출 시각아이디문제언어결과실행 시간메모리
555430MohamedFaresNebiliVision Program (IOI19_vision)C++14
12 / 100
4 ms1060 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;
        const int nx[4] = {0, 0, 1, -1}, ny[4] = {-1, 1, 0, 0};

        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 tseven(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++) {
                    vector<int> S;
                    for(int j = 0; j < 4; j++) {
                        int x = l + nx[j], y = i + ny[j];
                        if(x >= 0 && x < n && y >= 0 && y < m)
                            S.pb(calc(x, y));
                    }
                    if(S.empty()) continue;
                    res.pb(add_and({calc(l, i), add_or(S)}));
                }
            }
            add_or(res);
        }

        void construct_network(int H, int W, int K) {
            if(H == 2 && W == 3 && K == 3) {
                sample(H, W, K); return;
            }
            if(K == 1) {
                tseven(H, W, K); return;
            }
            n = H, m = W; vector<int> res;
            int curr = n * n * m * m;
            if(min(n, m) == 1) {
                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);
        }



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

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:74:17: warning: unused variable 'curr' [-Wunused-variable]
   74 |             int curr = n * n * m * m;
      |                 ^~~~
#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...