Submission #108428

# Submission time Handle Problem Language Result Execution time Memory
108428 2019-04-29T09:41:47 Z mohammad_kilani Land of the Rainbow Gold (APIO17_rainbow) C++17
11 / 100
3000 ms 574828 KB
#include "rainbow.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 20000010;
vector< pair<int,int> > arr , arr2, arr3;
vector < int > g[N];
int vis[N] , vi = 0;
int dr[8] = {0 , 1 , 0 , -1 , 1 , 1 , -1 , -1};
int dc[8] = {1 , 0 , -1 , 0 , 1 , -1, 1, -1};


int r1 , c1 , r2 , c2 , n , m;

inline bool in(int r,int c){
	return (r >= r1 && r <= r2 && c >= c1 && c <= c2);
}

void init(int R, int C, int sr, int sc, int M, char *S) {
	n = R , m = C;
	arr2.push_back(make_pair(sr,sc));
	for(int i = 0;i < M;i++){
		if(S[i] == 'N') sr--; else if(S[i] == 'S') sr++; else if(S[i] == 'E') sc++; else sc--;
			arr2.push_back(make_pair(sr,sc));
	}
	sort(arr2.begin(),arr2.end());
	arr2.resize(unique(arr2.begin(),arr2.end()) - arr2.begin());
}

void make_arr(vector< pair<int,int> > &arr2){
	arr.clear();
	r1 = 1 , r2 = n , c1 = 1 , c2 = m;
	int sr , sc , nr , nc, idx;
	for(int i = 0 ;i < (int)arr2.size();i++){
		sr = arr2[i].first;
		sc = arr2[i].second;
		for(int j = 0 ;j < 8 ;j++){
			nr = sr + dr[j];
			nc = sc + dc[j];
			if(in(nr,nc) && !binary_search(arr2.begin(),arr2.end() , make_pair(nr,nc))){
				arr.push_back(make_pair(nr,nc));
			}
		}
	}
	sort(arr.begin(),arr.end());
	arr.resize(unique(arr.begin(),arr.end()) - arr.begin());
	for(int i = 0 ; i < (int)arr.size();i++){
		g[i].clear();
		sr = arr[i].first;
		sc = arr[i].second;
		for(int j = 0 ;j < 4;j++){
			nr = sr + dr[j];
			nc = sc + dc[j];
			idx = lower_bound(arr.begin(),arr.end(),make_pair(nr , nc)) - arr.begin();
			if(idx != (int)arr.size() && arr[idx].first == nr && arr[idx].second == nc){
				g[i].push_back(idx);
			}
		}
	}

}

void DFS(int node){
	vis[node] = vi;
	for(int i = 0 ;i < (int)g[node].size();i++){
		if(vis[g[node][i]] == vi || !in(arr[g[node][i]].first,arr[g[node][i]].second)) continue;
		DFS(g[node][i]);
	}
}

int colour(int ar, int ac, int br, int bc) {
    int ans = 0;
    arr3.clear();
    arr3 = arr2;
    for(int i = ar;i<=br;i++){
    	arr3.push_back(make_pair(i,ac - 1));
    	arr3.push_back(make_pair(i,bc + 1));
    }
    for(int i = ac;i<=bc;i++){
    	arr3.push_back(make_pair(ar - 1,i));
    	arr3.push_back(make_pair(br + 1,i));
    }
    sort(arr3.begin(),arr3.end());
    arr3.resize(unique(arr3.begin(),arr3.end()) - arr3.begin());
	make_arr(arr3);
	r1 = ar , c1 = ac , r2 = br , c2 = bc;
    vi++;
    for(int i = 0 ;i < (int)arr.size();i++){
    	if(vis[i] == vi || !in(arr[i].first,arr[i].second)) continue;
    	DFS(i);
    	ans++;
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 531 ms 470136 KB Output is correct
2 Correct 1299 ms 470292 KB Output is correct
3 Correct 724 ms 470044 KB Output is correct
4 Correct 715 ms 470008 KB Output is correct
5 Correct 1257 ms 470264 KB Output is correct
6 Correct 387 ms 469960 KB Output is correct
7 Correct 387 ms 470072 KB Output is correct
8 Correct 389 ms 470008 KB Output is correct
9 Correct 414 ms 470100 KB Output is correct
10 Correct 415 ms 470140 KB Output is correct
11 Correct 766 ms 470268 KB Output is correct
12 Correct 1022 ms 470220 KB Output is correct
13 Correct 1554 ms 470516 KB Output is correct
14 Correct 1609 ms 470308 KB Output is correct
15 Correct 414 ms 470088 KB Output is correct
16 Correct 445 ms 470032 KB Output is correct
17 Correct 445 ms 470008 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 445 ms 470032 KB Output is correct
2 Correct 445 ms 470008 KB Output is correct
3 Execution timed out 3052 ms 501864 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 414 ms 470088 KB Output is correct
2 Correct 1049 ms 526740 KB Output is correct
3 Correct 1033 ms 526208 KB Output is correct
4 Correct 857 ms 507164 KB Output is correct
5 Correct 794 ms 497636 KB Output is correct
6 Correct 1281 ms 548160 KB Output is correct
7 Incorrect 1462 ms 574828 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 531 ms 470136 KB Output is correct
2 Correct 1299 ms 470292 KB Output is correct
3 Correct 724 ms 470044 KB Output is correct
4 Correct 715 ms 470008 KB Output is correct
5 Correct 1257 ms 470264 KB Output is correct
6 Correct 387 ms 469960 KB Output is correct
7 Correct 387 ms 470072 KB Output is correct
8 Correct 389 ms 470008 KB Output is correct
9 Correct 414 ms 470100 KB Output is correct
10 Correct 415 ms 470140 KB Output is correct
11 Correct 766 ms 470268 KB Output is correct
12 Correct 1022 ms 470220 KB Output is correct
13 Correct 1554 ms 470516 KB Output is correct
14 Correct 1609 ms 470308 KB Output is correct
15 Correct 414 ms 470088 KB Output is correct
16 Correct 445 ms 470032 KB Output is correct
17 Correct 445 ms 470008 KB Output is correct
18 Execution timed out 3138 ms 477632 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 531 ms 470136 KB Output is correct
2 Correct 1299 ms 470292 KB Output is correct
3 Correct 724 ms 470044 KB Output is correct
4 Correct 715 ms 470008 KB Output is correct
5 Correct 1257 ms 470264 KB Output is correct
6 Correct 387 ms 469960 KB Output is correct
7 Correct 387 ms 470072 KB Output is correct
8 Correct 389 ms 470008 KB Output is correct
9 Correct 414 ms 470100 KB Output is correct
10 Correct 415 ms 470140 KB Output is correct
11 Correct 766 ms 470268 KB Output is correct
12 Correct 1022 ms 470220 KB Output is correct
13 Correct 1554 ms 470516 KB Output is correct
14 Correct 1609 ms 470308 KB Output is correct
15 Correct 414 ms 470088 KB Output is correct
16 Correct 445 ms 470032 KB Output is correct
17 Correct 445 ms 470008 KB Output is correct
18 Execution timed out 3138 ms 477632 KB Time limit exceeded
19 Halted 0 ms 0 KB -