The aim of this puzzle is to find a bomb, hidden on one cell of a grid. Each turn, you get to move wherever you want on the grid, and you get the direction of the bomb based on your position (up, down, left, up-right, etc). As explained in the code, a solution is to run a binary search. In other words, you move so that each indication allows you to narrow down (by half, or more) the number of possible locations where the bomb could be.
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv) {
int W, H, turns, x, y;
scanf("%d %d\n%d\n%d %d\n", &W, &H, &turns, &x, &y);
// these 4 variables circumscribe a zone where the bomb is
int xInf = 0;
int xSup = W-1;
int yInf = 0;
int ySup = H-1;
/* each turn, we go to the center of this zone, and the direction provided
allows us to narrow down the zone .
It is like a 2 dimensional binary search.*/
char BD[2] = { ' ', ' ' };
while (1) {
scanf("%s", BD);
if (BD[0] == 'U')
ySup = y-1;
else if (BD[0] == 'D')
yInf = y+1;
else
ySup = yInf = y;
if (BD[0] == 'R' || BD[1] == 'R')
xInf = x+1;
else if((BD[0] == 'L') || (BD[1] == 'L'))
xSup = x-1;
else
xSup = xInf = x;
x = (xInf + xSup)/2;
y = (yInf + ySup)/2;
printf("%d %d\n", x, y);
}
return EXIT_SUCCESS;
}