Submission #262914

#TimeUsernameProblemLanguageResultExecution timeMemory
262914SorahISALand of the Rainbow Gold (APIO17_rainbow)C++11
23 / 100
131 ms2552 KiB
#include "rainbow.h" #include <bits/stdc++.h> using namespace std; // #define int long long #define double long double using pii = pair<int, int>; template<typename T> using prior = std::priority_queue<T, vector<T>, greater<T>>; template<typename T> using Prior = std::priority_queue<T>; #define X first #define Y second #define ALL(x) (x).begin(), (x).end() #define eb emplace_back #define pb push_back #define fastIO() ios_base::sync_with_stdio(false), cin.tie(0) const int maxn1 = 50 + 5; const int maxn2 = 1 << 18; int _R, _C; int app[maxn1][maxn1], vis[maxn1][maxn1]; int arr[5][maxn2]; vector<pii> vec[5]; void dfs(int nr, int nc, int ar, int ac, int br, int bc) { if (nr < ar or br < nr) return; if (nc < ac or bc < nc) return; if (vis[nr][nc] or app[nr][nc]) return; vis[nr][nc] = 1; dfs(nr + 1, nc, ar, ac, br, bc); dfs(nr - 1, nc, ar, ac, br, bc); dfs(nr, nc + 1, ar, ac, br, bc); dfs(nr, nc - 1, ar, ac, br, bc); } void init(int R, int C, int sr, int sc, int M, char *S) { _R = R, _C = C; if (_R == 2) { arr[sr][sc] = 1; for (int i = 0; i < M; ++i) { if (S[i] == 'N') --sr; if (S[i] == 'S') ++sr; if (S[i] == 'W') --sc; if (S[i] == 'E') ++sc; arr[sr][sc] = 1; } int lst1 = 0, lst2 = 0; for (int i = 0; i <= C; ++i) { if ( arr[1][i] and !arr[1][i + 1]) lst1 = i + 1; if (!arr[1][i] and arr[1][i + 1]) vec[1].eb(lst1, i); if ( arr[2][i] and !arr[2][i + 1]) lst2 = i + 1; if (!arr[2][i] and arr[2][i + 1]) vec[2].eb(lst2, i); } vec[1].eb(lst1, C + 1); vec[2].eb(lst2, C + 1); } else { app[sr][sc] = 1; for (int i = 0; i < M; ++i) { if (S[i] == 'N') --sr; if (S[i] == 'S') ++sr; if (S[i] == 'W') --sc; if (S[i] == 'E') ++sc; app[sr][sc] = 1; } } } int colour(int ar, int ac, int br, int bc) { if (_R == 2) { int cnt1L, cnt1R, cnt2L, cnt2R; if (lower_bound(ALL(vec[1]), pii{ac, 0}) != vec[1].begin() and (*prev(lower_bound(ALL(vec[1]), pii{ac, 0}))).Y >= ac) { cnt1L = lower_bound(ALL(vec[1]), pii{ac, 0}) - vec[1].begin() - 1; } else { cnt1L = lower_bound(ALL(vec[1]), pii{ac, 0}) - vec[1].begin(); } cnt1R = upper_bound(ALL(vec[1]), pii{bc, maxn2}) - vec[1].begin() - 1; if (lower_bound(ALL(vec[2]), pii{ac, 0}) != vec[2].begin() and (*prev(lower_bound(ALL(vec[2]), pii{ac, 0}))).Y >= ac) { cnt2L = lower_bound(ALL(vec[2]), pii{ac, 0}) - vec[2].begin() - 1; } else { cnt2L = lower_bound(ALL(vec[2]), pii{ac, 0}) - vec[2].begin(); } cnt2R = upper_bound(ALL(vec[2]), pii{bc, maxn2}) - vec[2].begin() - 1; // cout << cnt1L << " " << cnt1R << " " << cnt2L << " " << cnt2R << " "; int ans = (ar == 1 ? cnt1R - cnt1L + 1 : 0LL) + (br == 2 ? cnt2R - cnt2L + 1 : 0LL); if (ar == 1 and br == 2) { ans -= cnt1L == 0 and cnt2L == 0; ans -= cnt1R == vec[1].size() - 1 and cnt2R == vec[2].size() - 1; } return ans; } else { int cnt = 0; memset(vis, 0x00, sizeof(vis)); for (int i = ar; i <= br; ++i) { for (int j = ac; j <= bc; ++j) { if (!vis[i][j] and !app[i][j]) { ++cnt, dfs(i, j, ar, ac, br, bc); } } } return cnt; } }

Compilation message (stderr)

rainbow.cpp: In function 'int colour(int, int, int, int)':
rainbow.cpp:101:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |             ans -= cnt1R == vec[1].size() - 1 and cnt2R == vec[2].size() - 1;
      |                    ~~~~~~^~~~~~~~~~~~~~~~~~~~
rainbow.cpp:101:57: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |             ans -= cnt1R == vec[1].size() - 1 and cnt2R == vec[2].size() - 1;
      |                                                   ~~~~~~^~~~~~~~~~~~~~~~~~~~
#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...