Pretty easy problem. Kings, Queens and Rooks are easy; with Knights you need to realize that knigns basically attack boxes of the opposite color. Once you figure that out, you are golden.
import java.io.PrintWriter;
import java.util.Scanner;
/**
*
* @author Sanchit M. Bhatnagar
* @see http://uhunt.felix-halim.net/id/74004
*
*/
public class P278 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
int N = sc.nextInt();
for (int zz = 0; zz < N; zz++) {
String type = sc.next();
int R = sc.nextInt();
int C = sc.nextInt();
int min = Math.min(R, C);
int max = Math.max(R, C);
if (type.equals("r") || type.equals("Q")) {
out.println(min);
} else if (type.equals("k")) {
int a = max / 2;
int b = (max - a);
int c = min / 2;
int d = (min - c);
out.println(Math.max(a * c + b * d, a * d + b * c));
} else if (type.equals("K")) {
out.println(((max + 1) / 2) * ((min + 1) / 2));
}
}
out.close();
sc.close();
}
}
How do you convince yourself that the Knight solution is Optimum.
I mean how do you figured out that was the optimal way to distribute the Knights.
Thanks!
Hey Man, Sorry for the late response. Effectively for an 8×8 board this works well and is easy to justify if you draw it all out. You can place knights on all black squares or on all white squares. :) This problem is particularly easy as m and n >= 4 which removes the tricky cases.