2013
11-12

# Flipping Colors

A rectangle with sides parallel to the x-y axes and its left-lower corner at (0, 0) is being painted. The rectangle may be thought of as a flat-screen display with almost infinite resolution; initially the entire rectangle is black. Two numbers are given 0 < h, v < 1 and then

• A vertical line is drawn dividing the horizontal sides of the rectangle in proportion h:1−h from the left.
• A horizontal line is drawn dividing the vertical sides of the rectangles in proportion v:1−v from the bottom up.
• These two lines divide the rectangle into four smaller rectangles.
• The upper left and the lower right sub-rectangles remain intact.
• The color of the other two rectangles is flipped (from black to white or from white to black) and now each of them is subject to the operation just performed on the bigger rectangle.
• This process continues (in principle) forever.

Given a point in the original rectangle but not on the boundary of any rectangle that turns up in the process of painting, determine the color of the point.

Input contains multiple cases. The first line of each case contains 4 numbers, the length of the rectangle H, the height of the rectangle V and then the numbers h and v. The next line contains one integer number n, the number of points to consider. The following n lines contain two numbers each, the x and the y coordinate of a point.

Organize your output as shown in the sample. For each point from input print the color of the point.

81 32 0.333333333333 0.5
6
16 30
16 25
16 12.0001
16 11.9999
16 7.987654321
16 7.0123456789
10 10 0.123456789 0.987654321
2
0.432 0.9876
9.432 0.9876
0 0 0 0

Case 1:
black
black
white
black
white
white
Case 2:
white
black

import java.util.*;

/**
*
* @author leo
*/
public class Main {
public static int judge(double H,double V,double h,double v,double x,double y,int state){

if((x>H*h&&y< V*v)||(x< H*h&&y>V*v)){
return state;
}else{
state++;
if(x< h*H&&y< v*V){
return judge(H*h,v*V,h,v,x,y,state);
}else{
return judge(H*(1.0-h),V*(1.0-v),h,v,x-H*h,y-V*v,state);
}
}

}
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
double H,V,h,v,x,y;
int n,state,count=1;
H=sc.nextDouble();
V=sc.nextDouble();
h=sc.nextDouble();
v=sc.nextDouble();
while(H>1.0e-6){
n=sc.nextInt();
System.out.println("Case "+count+":");
for(int i=1;i<=n;i++){
x=sc.nextDouble();
y=sc.nextDouble();
state=judge(H,V,h,v,x,y,0);

if(state%2==0)
System.out.println("black");
else
System.out.println("white");

}
count++;

H=sc.nextDouble();
V=sc.nextDouble();
h=sc.nextDouble();
v=sc.nextDouble();
}
}
}