11507 - Bender B. Rodríguez Problem
Time limit: 4.000 seconds
Bender is a robot built by Mom's Friendly Robot Company at its plant in Tijuana, Mexico in 2996 . He is aBending-Unit 22, serial number 2716057 and chassis number 1729
Bender needs to bend a wire of length L (L 2 an integer). The wire is represented in the Bender's brain (aMOS Technology 6502 microprocessor) as a line stucked in the origin of a tridimensional cartesian coordinate system, and extended along the x positive axis (+x), so that the fixed extreme of the wire is in the coordinate (0,0,0) and the free extreme of the wire is in the coordinate (L,0,0).
Bender bends the wire at specific points, starting at the point (L-1,0,0) and ending at the point (1,0,0). For each i from L-1 to 1, Bender can take one of the following decisions:
- Not to bend the wire at point (i,0,0).
- To bend the wire at point (i,0,0) an angle of to be parallel to the axis +y, -y, +z or -z.
For example, if L=3 and Bender bends the wire at (2,0,0) on the +y axis direction, and at (1,0,0) on the -yaxis direction, the result would be:
Given a sequence of bends, you must determine what direction is pointed by the last segment of the wire (+xin the example). You can suppose that the wire can intercept itself, after all it is the future!
Input
The first line of each test case gives an integer L (2 L 100000) indicating the length of the wire.
The second line of each test case contains the L-1 decisions taken by Bender at each point, separated by spaces. The j-th decision in the list (for each 1 j L-1) corresponds to the decision taken at the point(L-j,0,0), and must be one of the following:
- No if the wire isn't bended at point (L-j,0,0).
- +y if the wire is bended at point (L-j,0,0) on the +y
- -y if the wire is bended at point (L-j,0,0) on the -y
- +z if the wire is bended at point (L-j,0,0) on the +z
- -z if the wire is bended at point (L-j,0,0) on the -z
The end of the input is indicated when L=0.
Output
For each case in the input, print one line with the direction pointed by the last segment of the wire, +x, -x, +y, -y, +z or -z
Sample Input
3+z -z3
+z +y
2
+z
4
+z +y +z
5
No +z No No
0
Sample Output
+x+z+z
-x
+z
有以下公式:
1. +y -y = +x
2. +y +y = -x
3. +y (+/-)z = +y
4. 由2、3得 +y ±z ±(+/-)z ... (+/-)z +y = -x
5. -x (+/-)y = (-/+)y
完整代码:
/*0.019s*/
#include<cstdio>
int main()
{
int n;
bool sgn;
char axis, ch1, ch2;
while (scanf("%d\n", &n), n)
{
sgn = true, axis = 'x';
while (--n)
{
ch1 = getchar(), ch2 = getchar(), getchar();
if (ch1 == 'N') continue;
if (axis == 'x')
sgn = !(sgn ^ (ch1 == '+')), axis = ch2;
else if (ch2 == axis)
sgn = sgn ^ (ch1 == '+'), axis = 'x';
}
putchar(sgn ? '+' : '-'), putchar(axis), putchar(10);
}
return 0;
}