제출 #200302

#제출 시각아이디문제언어결과실행 시간메모리
200302dimash241무지개나라 (APIO17_rainbow)C++17
11 / 100
25 ms760 KiB
//#pragma GCC target("avx2") //#pragma GCC optimize("O3") //# include <x86intrin.h> # include <bits/stdc++.h> #include "rainbow.h" # include <ext/pb_ds/assoc_container.hpp> # include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template<typename T> using ordered_set = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define _USE_MATH_DEFINES_ #define ll long long #define ld long double #define Accepted 0 #define pb push_back #define mp make_pair #define sz(x) (int)(x.size()) #define every(x) x.begin(),x.end() #define F first #define S second #define lb lower_bound #define ub upper_bound #define For(i,x,y) for (ll i = x; i <= y; i ++) #define FOr(i,x,y) for (ll i = x; i >= y; i --) #define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0) // ROAD to... Red inline void Input_Output () { //freopen(".in", "r", stdin); //freopen(".out", "w", stdout); } const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, -1, 0, 1}; int n, m, k, q; int u[55][55]; int d[55][55]; int timer; inline void moveto (int &x, int &y, char c) { if (c == 'N') x--; if (c == 'S') x++; if (c == 'W') y--; if (c == 'E') y++; assert(x > 0 && y > 0 && x <= n && y <= m); } int lx, ly, rx, ry; bool cordi (int x, int y) { if(!(x >= lx && y >= ly && x <= rx && y <= ry)) return 0; return !d[x][y]; } void init(int _n, int _m, int x, int y, int _k, char *s) { n = _n, m = _m, k = _k; d[x][y] = 1; for (int i = 0; i < k; ++i) { moveto(x, y, s[i]); // cout << x << ' ' << y << '\n'; d[x][y] = 1; } } void dfs (int ax, int bx) { u[ax][bx] = timer; // cout << ax << ' ' << bx << '\n'; for (int dir = 0; dir < 4; ++dir) { int ay = ax + dx[dir]; int by = bx + dy[dir]; if (cordi(ay, by) && u[ay][by] != timer) dfs(ay, by); } } int colour(int ar, int ac, int br, int bc) { lx = ar; rx = br; ly = ac; ry = bc; ++timer; int cnt = 0; for (int ax = ar; ax <= br; ++ax) { for (int bx = ac; bx <= bc; ++bx) { if (cordi(ax, bx) && u[ax][bx] != timer) { //cout << ax << ' ' << bx << '\n'; dfs(ax, bx); ++cnt; } } } return cnt; } /* static int R, C, M, Q; static int sr, sc; static char S[100000 + 5]; int main() { scanf("%d %d %d %d", &R, &C, &M, &Q); scanf("%d %d", &sr, &sc); if (M > 0) { scanf(" %s ", S); } init(R, C, sr, sc, M, S); int query; for (query = 0; query < Q; query++) { int ar, ac, br, bc; scanf("%d %d %d %d", &ar, &ac, &br, &bc); printf("%d\n", colour(ar, ac, br, bc)); } return 0; } // B...a*/
#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...