Submission #949041

# Submission time Handle Problem Language Result Execution time Memory
949041 2024-03-18T20:44:47 Z Saul0906 Land of the Rainbow Gold (APIO17_rainbow) C++14
11 / 100
3000 ms 107072 KB
#include <bits/stdc++.h>
#include "rainbow.h"
#define rep(a,b,c) for(int a=b; a<c; a++)
#define repa(a,b) for(auto a: b)
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back

using namespace std;

set<pii> river;
set<int> rows[200005], cols[200005];
vector<pii> nriver;

void init(int R, int C, int sr, int sc, int M, char *S){
	river.clear();
	nriver.clear();
	river.insert({sr,sc});
	rep(i,0,2e5+5){
		cols[i].clear();
		rows[i].clear();
		cols[i].insert(0);
		cols[i].insert(R+1);
		rows[i].insert(0);
		rows[i].insert(C+1);
	}
	rep(i,0,M){
		nriver.pb({sr+1,sc});
		nriver.pb({sr-1,sc});
		nriver.pb({sr,sc+1});
		nriver.pb({sr,sc-1});
		rows[sr].insert(sc);
		cols[sc].insert(sr);
		if(S[i]=='N') sr--;
		else if(S[i]=='S') sr++;
		else if(S[i]=='W') sc--;
		else sc++;
		river.insert({sr,sc});
	}
	nriver.pb({sr+1,sc});
	nriver.pb({sr-1,sc});
	nriver.pb({sr,sc+1});
	nriver.pb({sr,sc-1});
	rows[sr].insert(sc);
	cols[sc].insert(sr);
}

set<pii> vis;
map<pii,pii> dsu;

pii find(pii a){
	if(!dsu.count(a) || dsu[a]==a) return a;
	return dsu[a]=find(dsu[a]);
}

void join(pii a, pii b){
	dsu[find(a)]=find(b);
}

void dfs(int x, int y, int ar, int ac, int br, int bc){
	if(x<ar || x>br || y<ac || y>bc || vis.count({x,y})) return;
	vis.insert({x,y});
	join({x,y},{x,y});
	auto it=rows[x].lower_bound(y);
	int y1, y2, x1, x2;
	y2=*it;
	it--;
	y1=*it;
	it=cols[y].lower_bound(x);
	x2=*it;
	it--;
	x1=*it;
	y1=max(y1,ac-1)+1;
	y2=min(y2,bc+1)-1;
	x1=max(x1,ar-1)+1;
	x2=min(x2,br+1)-1;
	if(!river.count({x,y1})) {join({x,y},{x,y1}); if(!vis.count({x,y1})) dfs(x,y1,ar,ac,br,bc);}
	if(!river.count({x,y2})) {join({x,y},{x,y2}); if(!vis.count({x,y2})) dfs(x,y2,ar,ac,br,bc);}
	if(!river.count({x1,y})) {join({x,y},{x1,y}); if(!vis.count({x1,y})) dfs(x1,y,ar,ac,br,bc);}
	if(!river.count({x2,y})) {join({x,y},{x2,y}); if(!vis.count({x2,y})) dfs(x2,y,ar,ac,br,bc);}
}

int colour(int ar, int ac, int br, int bc){
	vis.clear();
	dsu.clear();
	int c=0;
	nriver.pb({ar,ac});
	nriver.pb({br,bc});
	vector<pii> ext;
	repa(e,nriver) if(!river.count(e) && !vis.count(e)){
		if(e.fi<br && !river.count({e.fi+1,e.se})) e.fi++;
		if(e.fi>ar && !river.count({e.fi-1,e.se})) e.fi--;
		if(e.se<bc && !river.count({e.fi,e.se+1})) e.se++;
		if(e.se>ac && !river.count({e.fi,e.se-1})) e.se--;
	}
	repa(e,nriver) if(!river.count(e) && !vis.count(e)) dfs(e.fi,e.se,ar,ac,br,bc);
	repa(e,ext) if(!river.count(e) && !vis.count(e)) dfs(e.fi,e.se,ar,ac,br,bc);
	nriver.pop_back();
	nriver.pop_back();
	repa(e,dsu) if(e.fi==e.se) c++;
	//, cout<<e.fi.fi<<" "<<e.fi.se<<endl;
	return c;
}
# Verdict Execution time Memory Grader output
1 Correct 214 ms 56844 KB Output is correct
2 Correct 1049 ms 57172 KB Output is correct
3 Correct 246 ms 56664 KB Output is correct
4 Correct 310 ms 56876 KB Output is correct
5 Correct 1250 ms 57196 KB Output is correct
6 Correct 45 ms 56664 KB Output is correct
7 Correct 45 ms 56724 KB Output is correct
8 Correct 53 ms 56788 KB Output is correct
9 Correct 44 ms 56792 KB Output is correct
10 Correct 45 ms 56656 KB Output is correct
11 Correct 568 ms 56920 KB Output is correct
12 Correct 795 ms 57172 KB Output is correct
13 Correct 1361 ms 57172 KB Output is correct
14 Correct 1908 ms 57684 KB Output is correct
15 Correct 57 ms 56880 KB Output is correct
16 Correct 51 ms 56660 KB Output is correct
17 Correct 44 ms 56664 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 51 ms 56660 KB Output is correct
2 Correct 44 ms 56664 KB Output is correct
3 Execution timed out 3031 ms 72360 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 57 ms 56880 KB Output is correct
2 Correct 1329 ms 96632 KB Output is correct
3 Correct 955 ms 95988 KB Output is correct
4 Correct 1552 ms 107072 KB Output is correct
5 Correct 742 ms 86160 KB Output is correct
6 Correct 105 ms 64192 KB Output is correct
7 Incorrect 185 ms 68572 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 214 ms 56844 KB Output is correct
2 Correct 1049 ms 57172 KB Output is correct
3 Correct 246 ms 56664 KB Output is correct
4 Correct 310 ms 56876 KB Output is correct
5 Correct 1250 ms 57196 KB Output is correct
6 Correct 45 ms 56664 KB Output is correct
7 Correct 45 ms 56724 KB Output is correct
8 Correct 53 ms 56788 KB Output is correct
9 Correct 44 ms 56792 KB Output is correct
10 Correct 45 ms 56656 KB Output is correct
11 Correct 568 ms 56920 KB Output is correct
12 Correct 795 ms 57172 KB Output is correct
13 Correct 1361 ms 57172 KB Output is correct
14 Correct 1908 ms 57684 KB Output is correct
15 Correct 57 ms 56880 KB Output is correct
16 Correct 51 ms 56660 KB Output is correct
17 Correct 44 ms 56664 KB Output is correct
18 Execution timed out 3027 ms 73544 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 214 ms 56844 KB Output is correct
2 Correct 1049 ms 57172 KB Output is correct
3 Correct 246 ms 56664 KB Output is correct
4 Correct 310 ms 56876 KB Output is correct
5 Correct 1250 ms 57196 KB Output is correct
6 Correct 45 ms 56664 KB Output is correct
7 Correct 45 ms 56724 KB Output is correct
8 Correct 53 ms 56788 KB Output is correct
9 Correct 44 ms 56792 KB Output is correct
10 Correct 45 ms 56656 KB Output is correct
11 Correct 568 ms 56920 KB Output is correct
12 Correct 795 ms 57172 KB Output is correct
13 Correct 1361 ms 57172 KB Output is correct
14 Correct 1908 ms 57684 KB Output is correct
15 Correct 57 ms 56880 KB Output is correct
16 Correct 51 ms 56660 KB Output is correct
17 Correct 44 ms 56664 KB Output is correct
18 Execution timed out 3027 ms 73544 KB Time limit exceeded
19 Halted 0 ms 0 KB -