#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define rep(i,m,n) for(int i=(m); i<=(n); i++)
#define reb(i,m,n) for(int i=(m); i>=(n); i--)
#define iter(id, v) for(auto id : v)
#define fs first
#define se second
#define MP make_pair
#define pb push_back
#define bit(msk, i) ((msk >> i) & 1)
#define SZ(v) (ll)v.size()
#define ALL(v) v.begin(),v.end()
using namespace std;
mt19937_64 rd(chrono :: steady_clock :: now ().time_since_epoch().count());
ll Rand (ll l, ll r) { return uniform_int_distribution<ll> (l, r) (rd); }
const int N = 2e5 + 7;
const ll INF = 1e18;
const ll BASE = 137;
const int szBL = 350;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int n, m, Sr, Sc, nmove, Q;
vector<char> moves;
bool sub1c, sub2c, sub3c;
namespace sub1 {
const int N1 = 50 + 7;
int dd[N1][N1];
void init () {
int u = Sr, v = Sc;
dd[u][v] = -1;
iter (&c, moves) {
if (c == 'N') dd[--u][v] = -1;
else if (c == 'S') dd[++u][v] = -1;
else if (c == 'W') dd[u][--v] = -1;
else dd[u][++v] =-1;
}
}
bool inside (int u, int v, int x, int y, int u1, int v1) {
return u >= x && u <= u1 && v >= y && v <= v1;
}
int solution (int x, int y, int u, int v) {
rep (i, 1, n)
rep (j, 1, m) if (dd[i][j] != -1) dd[i][j] = 0;
// rep (i, 1, n) rep (j, 1, m) cout << dd[i][j] <<" \n"[j == m];
auto flooding = [&] (int u1, int v1, int color) {
static queue<pii> Q;
Q.push({u1, v1});
dd[u1][v1] = color;
while (!Q.empty()) {
pii cur = Q.front();
Q.pop();
rep (k, 0, 3) {
int ni = cur.fs + dx[k], nj = cur.se + dy[k];
if (inside(ni, nj, x, y, u, v) && dd[ni][nj] != -1 && dd[ni][nj] == 0) {
dd[ni][nj] = color;
Q.push({ni, nj});
}
}
}
};
int num_cpn = 0;
rep (i, 1, n)
rep (j, 1, m) {
if (dd[i][j] == 0 && inside(i, j, x, y, u, v)) {
++num_cpn;
flooding(i, j, num_cpn);
}
}
return num_cpn;
}
}
namespace sub2 {
int dd[5][N], pre[5][N];
void init () {
int u = Sr, v = Sc;
dd[u][v] = -1;
iter (&c, moves) {
if (c == 'N') dd[--u][v] = -1;
else if (c == 'S') dd[++u][v] = -1;
else if (c == 'W') dd[u][--v] = -1;
else dd[u][++v] =-1;
}
rep (i, 2, m) {
pre[3][i] = pre[3][i - 1] + (dd[1][i] == dd[2][i] && dd[1][i] == -1 && dd[1][i - 1] * dd[2][i - 1] == 0);
pre[2][i] = pre[2][i - 1] + (dd[2][i] == -1 && dd[2][i - 1] == 0);
pre[1][i] = pre[1][i - 1] + (dd[1][i] == -1 && dd[1][i - 1] == 0);
}
}
int solution (int x, int y, int u, int v) {
if (x != u) {
return pre[3][v] - pre[3][y] + (dd[1][v] == 0 || dd[2][v] == 0);
}
else {
return pre[x][v] - pre[x][y] + (dd[x][v] == 0);
}
}
}
int colour (int x, int y, int u, int v) {
if (sub1c)
return sub1 :: solution(x, y, u, v);
else if (sub2c) return sub2 :: solution(x, y, u, v);
}
void init (int _n, int _m, int _Sr, int _Sc, int _nmove, char _moves[]) {
n = _n;
m = _m;
Sr = _Sr;
Sc = _Sc;
nmove = _nmove;
rep (i, 0, nmove - 1) moves.pb(_moves[i]);
if (n <= 50 && m <= 50) {
sub1 :: init();
sub1c = 1;
}
else if (n == 2) {
sub2 :: init();
sub2c = 1;
}
}
void solution() {
cin >> n >> m >> nmove >> Q;
cin >> Sr >> Sc;
string S;
cin >> S;
rep (i, 0, nmove - 1) moves.pb(S[i]);
if (n <= 50 && m <= 50) {
sub1 :: init();
sub1c = 1;
}
else if (n == 2) {
// sub2 :: init();
sub2c = 1;
}
rep (i, 1, Q) {
int x, y, u, v;
cin >> x >> y >> u >> v;
cout << colour (x, y, u, v) <<"\n";
}
}
#define file(name) freopen(name".inp","r",stdin); \
freopen(name".out","w",stdout);
//int main () {
//// file("c");
// ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0);
// int num_Test = 1;
//// cin >> num_Test;
// while (num_Test--)
// solution();
//}
/*
no bug +6
6 4 9 1
3 3
NWESSWEWS
2 3 2 3
*/
Compilation message
rainbow.cpp: In function 'int colour(int, int, int, int)':
rainbow.cpp:120:1: warning: control reaches end of non-void function [-Wreturn-type]
120 | }
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
344 KB |
Output is correct |
2 |
Correct |
8 ms |
600 KB |
Output is correct |
3 |
Correct |
13 ms |
348 KB |
Output is correct |
4 |
Correct |
15 ms |
600 KB |
Output is correct |
5 |
Correct |
8 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
372 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
13 ms |
348 KB |
Output is correct |
12 |
Correct |
11 ms |
508 KB |
Output is correct |
13 |
Correct |
10 ms |
348 KB |
Output is correct |
14 |
Correct |
7 ms |
464 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
32 ms |
5528 KB |
Output is correct |
4 |
Correct |
41 ms |
7252 KB |
Output is correct |
5 |
Correct |
32 ms |
7248 KB |
Output is correct |
6 |
Correct |
32 ms |
7004 KB |
Output is correct |
7 |
Correct |
32 ms |
7004 KB |
Output is correct |
8 |
Correct |
34 ms |
6480 KB |
Output is correct |
9 |
Correct |
32 ms |
7248 KB |
Output is correct |
10 |
Correct |
47 ms |
7164 KB |
Output is correct |
11 |
Correct |
33 ms |
6908 KB |
Output is correct |
12 |
Correct |
40 ms |
6956 KB |
Output is correct |
13 |
Correct |
30 ms |
7252 KB |
Output is correct |
14 |
Correct |
30 ms |
7252 KB |
Output is correct |
15 |
Correct |
31 ms |
7036 KB |
Output is correct |
16 |
Correct |
32 ms |
6936 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
1 ms |
860 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
344 KB |
Output is correct |
2 |
Correct |
8 ms |
600 KB |
Output is correct |
3 |
Correct |
13 ms |
348 KB |
Output is correct |
4 |
Correct |
15 ms |
600 KB |
Output is correct |
5 |
Correct |
8 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
372 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
13 ms |
348 KB |
Output is correct |
12 |
Correct |
11 ms |
508 KB |
Output is correct |
13 |
Correct |
10 ms |
348 KB |
Output is correct |
14 |
Correct |
7 ms |
464 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Runtime error |
2 ms |
1372 KB |
Execution killed with signal 11 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
344 KB |
Output is correct |
2 |
Correct |
8 ms |
600 KB |
Output is correct |
3 |
Correct |
13 ms |
348 KB |
Output is correct |
4 |
Correct |
15 ms |
600 KB |
Output is correct |
5 |
Correct |
8 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
372 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
13 ms |
348 KB |
Output is correct |
12 |
Correct |
11 ms |
508 KB |
Output is correct |
13 |
Correct |
10 ms |
348 KB |
Output is correct |
14 |
Correct |
7 ms |
464 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
0 ms |
348 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Runtime error |
2 ms |
1372 KB |
Execution killed with signal 11 |
19 |
Halted |
0 ms |
0 KB |
- |