Submission #68645

# Submission time Handle Problem Language Result Execution time Memory
68645 2018-08-17T18:51:50 Z KLPP Land of the Rainbow Gold (APIO17_rainbow) C++14
0 / 100
72 ms 1068 KB
#include "rainbow.h"
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef pair<int,int> pii;
bool table[500][500];
int r,c;
int CC[2000000][2];
int STm[2000000][32][2];
int STM[2000000][32][2];
void init(int R, int C, int sr, int sc, int M, char *S) {
	
	r=R;
	c=C;
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++)table[i][j]=1;
	}
	int x,y;
	x=sr-1;
	y=sc-1;
	table[x][y]=0;
	for(int i=0;i<M;i++){
		char c=S[i];
		if(c=='N')x--;
		if(c=='S')x++;
		if(c=='E')y++;
		if(c=='W')y--;
		table[x][y]=0;
	}
	/*for(int i=0;i<r;i++){
		for(int j=0;j<c;j++)cout<<table[i][j];
		cout<<endl;
	}*/
	if(r==2){
		int n=c;
		int color=0;	
		for(int i=0;i<n;i++){
			if(table[0][i]){//cout<<i<<endl;
				if(i>0 && table[0][i-1])CC[i][0]=CC[i-1][0];
				else CC[i][0]=color++;
			}else CC[i][0]=-1;
			//cout<<CC[i][0]<<" ";
		}//cout<<endl;
		for(int i=0;i<n;i++){
			if(table[1][i]){
				if(i>0 && table[1][i-1])CC[i][1]=CC[i-1][1];
				else CC[i][1]=color++;
			}else CC[i][1]=-1;
			//cout<<CC[i][1]<<" ";
		}//cout<<endl;
		for(int i=0;i<n;i++){
			STM[i][0][0]=CC[i][0];
			STM[i][0][1]=CC[i][1];
		}
		for(int j=1;j<32;j++){for(int i=0;i<n;i++){
			STM[i][j][0]=max(STM[i][j-1][0],STM[min(n-1,i+(1<<(j-1)))][j-1][0]);
			STM[i][j][1]=max(STM[i][j-1][1],STM[min(n-1,i+(1<<(j-1)))][j-1][1]);
			}
		}
		for(int i=0;i<n;i++){
			STm[i][0][0]=CC[i][0];
			STm[i][0][1]=CC[i][1];
			if(CC[i][0]==-1)STm[i][0][0]=n+1;
			if(CC[i][1]==-1)STm[i][0][1]=n+1;
		}
		for(int j=1;j<32;j++){
			for(int i=0;i<n;i++){
			STm[i][j][0]=min(STm[i][j-1][0],STm[min(n-1,i+(1<<(j-1)))][j-1][0]);
			STm[i][j][1]=min(STm[i][j-1][1],STm[min(n-1,i+(1<<(j-1)))][j-1][1]);
			}
		}
	}
}

int colour(int ar, int ac, int br, int bc){
	ar--;
	ac--;
	br--;
	bc--;
	if(r!=2){
	bool visited[r][c];
	for(int x=ar;x<=br;x++){
		for(int y=ac;y<=bc;y++){
			visited[x][y]=false;
		}
	}
	int CC=0;
	for(int x=ar;x<=br;x++){
		for(int y=ac;y<=bc;y++){
			if(!visited[x][y] && table[x][y]){
			queue<pii>q;
			q.push(pii(x,y));
			while(!q.empty()){
				pii p=q.front();q.pop();
				if(ar<=p.first && p.first<=br && ac<=p.second && p.second<=bc && !visited[p.first][p.second] && table[p.first][p.second]){
					visited[p.first][p.second]=true;
					q.push(pii(p.first-1,p.second));
					q.push(pii(p.first+1,p.second));
					q.push(pii(p.first,p.second+1));
					q.push(pii(p.first,p.second-1));
				}
			}
			CC++;
			}
		}
	}
	return CC;
	}
	int pow=30;
	while((1<<pow)>bc-ac+1){
		pow--;
	}
	if(ar==br){
		int maximo=max(STM[ac][pow][ar],STM[bc-(1<<pow)+1][pow][ar]);
		int minimo=min(STm[ac][pow][ar],STm[bc-(1<<pow)+1][pow][ar]);
		//cout<<maximo<<" "<<minimo<<" "<<pow<<endl;
		if(maximo==-1)return 0;
		return maximo-minimo+1;
	}
	int CC=0;
	for(int a=ar;a<=br;a++){
		int maximo=max(STM[ac][pow][a],STM[bc-(1<<pow)+1][pow][a]);
		int minimo=min(STm[ac][pow][a],STm[bc-(1<<pow)+1][pow][a]);
		//cout<<maximo<<" "<<minimo<<endl;
		if(maximo>=0)CC+=maximo-minimo+1;
	}//cout<<CC<<endl;
	if(table[ac][0]==table[ac][1])CC--;
	if(bc!=ac && table[bc][0]==table[bc][1] && CC>1)CC--;
	return CC;
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 248 KB Output is correct
2 Correct 23 ms 356 KB Output is correct
3 Correct 60 ms 448 KB Output is correct
4 Correct 44 ms 500 KB Output is correct
5 Correct 16 ms 692 KB Output is correct
6 Correct 2 ms 692 KB Output is correct
7 Correct 2 ms 692 KB Output is correct
8 Correct 2 ms 692 KB Output is correct
9 Correct 4 ms 692 KB Output is correct
10 Correct 2 ms 692 KB Output is correct
11 Correct 36 ms 692 KB Output is correct
12 Correct 30 ms 692 KB Output is correct
13 Correct 22 ms 692 KB Output is correct
14 Correct 55 ms 692 KB Output is correct
15 Correct 2 ms 692 KB Output is correct
16 Incorrect 3 ms 692 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 692 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 692 KB Output is correct
2 Runtime error 72 ms 1068 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 248 KB Output is correct
2 Correct 23 ms 356 KB Output is correct
3 Correct 60 ms 448 KB Output is correct
4 Correct 44 ms 500 KB Output is correct
5 Correct 16 ms 692 KB Output is correct
6 Correct 2 ms 692 KB Output is correct
7 Correct 2 ms 692 KB Output is correct
8 Correct 2 ms 692 KB Output is correct
9 Correct 4 ms 692 KB Output is correct
10 Correct 2 ms 692 KB Output is correct
11 Correct 36 ms 692 KB Output is correct
12 Correct 30 ms 692 KB Output is correct
13 Correct 22 ms 692 KB Output is correct
14 Correct 55 ms 692 KB Output is correct
15 Correct 2 ms 692 KB Output is correct
16 Incorrect 3 ms 692 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 248 KB Output is correct
2 Correct 23 ms 356 KB Output is correct
3 Correct 60 ms 448 KB Output is correct
4 Correct 44 ms 500 KB Output is correct
5 Correct 16 ms 692 KB Output is correct
6 Correct 2 ms 692 KB Output is correct
7 Correct 2 ms 692 KB Output is correct
8 Correct 2 ms 692 KB Output is correct
9 Correct 4 ms 692 KB Output is correct
10 Correct 2 ms 692 KB Output is correct
11 Correct 36 ms 692 KB Output is correct
12 Correct 30 ms 692 KB Output is correct
13 Correct 22 ms 692 KB Output is correct
14 Correct 55 ms 692 KB Output is correct
15 Correct 2 ms 692 KB Output is correct
16 Incorrect 3 ms 692 KB Output isn't correct
17 Halted 0 ms 0 KB -