#include <bits/stdc++.h>
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
using namespace std;
using lint = long long;
using pi = pair<int, int>;
const int MAXV = 1300000;
struct disj{
int pa[MAXV];
void init(){
iota(pa, pa + MAXV, 0);
}
int find(int x){
return pa[x] = (pa[x] == x ? x : find(pa[x]));
}
bool uni(int p, int q){
p = find(p);
q = find(q);
if(p == q) return 0;
pa[q] = p; return 1;
}
}disj;
int n, m;
int V;
bool good[MAXV][16];
int pa[MAXV], nxt[MAXV], sz[MAXV];
unordered_map<int, char> nei[MAXV / 2];
vector<int> justVisit[MAXV / 2];
int idx[MAXV];
int find(int x){
return pa[x] = (pa[x] == x ? x : find(pa[x]));
}
int find_next(int x){
while(sz(justVisit[idx[x]]) && find(justVisit[idx[x]].back()) == x){
justVisit[idx[x]].pop_back();
}
if(sz(justVisit[idx[x]]) == 0) return x;
return justVisit[idx[x]].back();
}
void merge_to(int u, int v){
u = find(u);
if(u == v) return;
pa[u] = v;
int iu = idx[u], iv = idx[v];
if(sz[u] > sz[v]) swap(iu, iv);
sz[v] += sz[u];
idx[v] = iv;
if(iu >= MAXV / 2 || iv >= MAXV / 2) return;
{
for(auto &i : justVisit[iu]) justVisit[iv].push_back(i);
}
{
vector<int> toKill;
for(auto &[x, y] : nei[iu]){
if(nei[iv].find(x) == nei[iv].end()){
nei[iv][x] = y;
continue;
}
else{
nei[iv][x] |= y;
if(good[x][nei[iv][x]]){
toKill.push_back(x);
}
}
}
for(auto &x : toKill){
nei[iv].erase(x);
justVisit[iv].push_back(x);
}
}
justVisit[iu].clear();
justVisit[iu].shrink_to_fit();
nei[iu].clear();
}
void solve(){
disj.init();
iota(pa, pa + MAXV, 0);
fill(sz, sz + V, 1);
iota(idx, idx + MAXV, 0);
for(int i = 0; i < V; i++){
nxt[i] = find_next(i);
}
int curV = V;
for(int i = 0; i < V; i++){
if(find(i) != i) continue;
if(i == find(nxt[i])) continue;
if(!disj.uni(i, nxt[i])){
for(int j = find(nxt[i]); find(j) != find(V); j = find(nxt[j])){
merge_to(j, V);
}
disj.uni(i, V);
nxt[V] = find_next(V);
V++;
}
}
int dap = 1e9;
int cnt = 0;
for(int i = 0; i < curV; i++){
int r = find(i);
if(find(r) == find(nxt[r])){
if(dap > sz[r]){
dap = sz[r];
cnt = 0;
}
if(dap == sz[r]) cnt++;
}
}
printf("%d\n%d\n", dap, cnt);
}
const int MAXN = 808;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
char buf[200005];
int mp[256];
int main(){
int idx[MAXN][MAXN] = {};
int dead[MAXN][MAXN] = {};
mp['N'] = 0;
mp['W'] = 1;
mp['S'] = 2;
mp['E'] = 3;
int k;
scanf("%d %d %d",&k,&n,&m);
scanf("%s", buf);
for(int i=0; i<k; i++){
buf[i + k] = buf[i];
}
k <<= 1;
int maxt[16] = {};
for(int i=0; i<16; i++){
int cnt = 0;
for(int j=0; j<k; j++){
if((i >> mp[buf[j]]) & 1){
cnt++;
maxt[i] = max(maxt[i], cnt);
}
else{
cnt = 0;
}
}
if(maxt[i] == k) maxt[i] = 1e9;
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int x; scanf("%d",&x);
if(x == 0){
dead[i][j] = 1;
continue;
}
idx[i][j] = V;
for(int k=0; k<16; k++){
if(x <= maxt[k]) good[V][k] = 1;
}
V++;
}
}
auto ok = [&](int x, int y){
return x >= 0 && x < n && y >= 0 && y < m && !dead[x][y];
};
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(!ok(i, j)) continue;
for(int k = 0; k < 4; k++){
if(ok(i + dx[k], j + dy[k])){
pi v(idx[i + dx[k]][j + dy[k]], 1 << k);
if(good[v.first][v.second]) justVisit[idx[i][j]].push_back(v.first);
else nei[idx[i][j]].insert(v);
}
}
}
}
solve();
}
Compilation message
virus.cpp: In function 'void merge_to(int, int)':
virus.cpp:66:26: warning: array subscript has type 'char' [-Wchar-subscripts]
66 | if(good[x][nei[iv][x]]){
| ^
virus.cpp: In function 'int main()':
virus.cpp:142:21: warning: array subscript has type 'char' [-Wchar-subscripts]
142 | if((i >> mp[buf[j]]) & 1){
| ~~~~~^
virus.cpp:132:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
132 | scanf("%d %d %d",&k,&n,&m);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~
virus.cpp:133:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
133 | scanf("%s", buf);
| ~~~~~^~~~~~~~~~~
virus.cpp:154:16: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
154 | int x; scanf("%d",&x);
| ~~~~~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
42 ms |
71748 KB |
Output is correct |
2 |
Correct |
614 ms |
235972 KB |
Output is correct |
3 |
Correct |
540 ms |
236652 KB |
Output is correct |
4 |
Correct |
525 ms |
236740 KB |
Output is correct |
5 |
Correct |
514 ms |
236872 KB |
Output is correct |
6 |
Correct |
39 ms |
71560 KB |
Output is correct |
7 |
Correct |
1180 ms |
241784 KB |
Output is correct |
8 |
Correct |
215 ms |
129216 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
40 ms |
71496 KB |
Output is correct |
2 |
Correct |
44 ms |
71760 KB |
Output is correct |
3 |
Correct |
56 ms |
71748 KB |
Output is correct |
4 |
Correct |
43 ms |
71688 KB |
Output is correct |
5 |
Correct |
56 ms |
71648 KB |
Output is correct |
6 |
Correct |
57 ms |
72004 KB |
Output is correct |
7 |
Correct |
40 ms |
71452 KB |
Output is correct |
8 |
Correct |
55 ms |
71748 KB |
Output is correct |
9 |
Correct |
42 ms |
71860 KB |
Output is correct |
10 |
Correct |
43 ms |
71696 KB |
Output is correct |
11 |
Correct |
49 ms |
72252 KB |
Output is correct |
12 |
Correct |
49 ms |
71864 KB |
Output is correct |
13 |
Correct |
55 ms |
72224 KB |
Output is correct |
14 |
Correct |
56 ms |
72240 KB |
Output is correct |
15 |
Correct |
58 ms |
72228 KB |
Output is correct |
16 |
Correct |
58 ms |
72176 KB |
Output is correct |
17 |
Correct |
51 ms |
72132 KB |
Output is correct |
18 |
Correct |
49 ms |
72032 KB |
Output is correct |
19 |
Correct |
57 ms |
72288 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
42 ms |
71748 KB |
Output is correct |
2 |
Correct |
614 ms |
235972 KB |
Output is correct |
3 |
Correct |
540 ms |
236652 KB |
Output is correct |
4 |
Correct |
525 ms |
236740 KB |
Output is correct |
5 |
Correct |
514 ms |
236872 KB |
Output is correct |
6 |
Correct |
39 ms |
71560 KB |
Output is correct |
7 |
Correct |
1180 ms |
241784 KB |
Output is correct |
8 |
Correct |
215 ms |
129216 KB |
Output is correct |
9 |
Correct |
40 ms |
71496 KB |
Output is correct |
10 |
Correct |
44 ms |
71760 KB |
Output is correct |
11 |
Correct |
56 ms |
71748 KB |
Output is correct |
12 |
Correct |
43 ms |
71688 KB |
Output is correct |
13 |
Correct |
56 ms |
71648 KB |
Output is correct |
14 |
Correct |
57 ms |
72004 KB |
Output is correct |
15 |
Correct |
40 ms |
71452 KB |
Output is correct |
16 |
Correct |
55 ms |
71748 KB |
Output is correct |
17 |
Correct |
42 ms |
71860 KB |
Output is correct |
18 |
Correct |
43 ms |
71696 KB |
Output is correct |
19 |
Correct |
49 ms |
72252 KB |
Output is correct |
20 |
Correct |
49 ms |
71864 KB |
Output is correct |
21 |
Correct |
55 ms |
72224 KB |
Output is correct |
22 |
Correct |
56 ms |
72240 KB |
Output is correct |
23 |
Correct |
58 ms |
72228 KB |
Output is correct |
24 |
Correct |
58 ms |
72176 KB |
Output is correct |
25 |
Correct |
51 ms |
72132 KB |
Output is correct |
26 |
Correct |
49 ms |
72032 KB |
Output is correct |
27 |
Correct |
57 ms |
72288 KB |
Output is correct |
28 |
Correct |
568 ms |
140344 KB |
Output is correct |
29 |
Correct |
393 ms |
144680 KB |
Output is correct |
30 |
Correct |
953 ms |
219812 KB |
Output is correct |
31 |
Correct |
723 ms |
178228 KB |
Output is correct |
32 |
Correct |
783 ms |
181124 KB |
Output is correct |
33 |
Correct |
578 ms |
233904 KB |
Output is correct |
34 |
Correct |
642 ms |
135396 KB |
Output is correct |
35 |
Correct |
402 ms |
116676 KB |
Output is correct |
36 |
Correct |
1031 ms |
179856 KB |
Output is correct |
37 |
Correct |
631 ms |
145476 KB |
Output is correct |
38 |
Correct |
407 ms |
118464 KB |
Output is correct |
39 |
Correct |
745 ms |
220952 KB |
Output is correct |
40 |
Correct |
888 ms |
216236 KB |
Output is correct |
41 |
Correct |
518 ms |
216724 KB |
Output is correct |
42 |
Correct |
385 ms |
103840 KB |
Output is correct |
43 |
Correct |
563 ms |
205828 KB |
Output is correct |
44 |
Correct |
222 ms |
129276 KB |
Output is correct |