1 条题解
-
0
解题思路
首先很容易判断出当前坐标落在白格子上的条件是 为奇数, 表示下取整。
那么可以从起点不断地循环跳,并用上述条件判断是否跳到了白格子, 如果不在白格子,则对当前当前坐标模,当已经被访问过时说明无解。
这里有一个要注意的地方,这个地方让我了很多次,那就是:
模运算时如果(或者时即落在边界上,需要判断这个点是在格子最左侧边界还是在右侧边界,判断的方法是判断当前这个格子的颜色,如果是黑格子则为起始处,如果是白格子则是在最右侧。
标程
#include <iostream> #include <cstring> #define MAX_N 1005 using namespace std; bool v[MAX_N + 1][MAX_N + 1]; int main() { long long S, x, y, dx, dy; while (cin >> S >> x >> y >> dx >> dy && (S + x + y + dx + dy) != 0) { for (int i = 0; i <= MAX_N; ++i) { for (int j = 0; j <= MAX_N; ++j) { v[i][j] = false; } } long long curX = x, curY = y, steps = 0; bool can = true; while (true) { long long r1 = curX % S, r2 = curY % S; long long q1 = curX / S, q2 = curY / S; if (r1 != 0 && r2 != 0 && (q1 + q2) % 2 == 1) { break; } // 判断在哪个边界 if (r1 == 0 && (q1 + q2) % 2 == 1) { r1 = S; } if (r2 == 0 && (q1 + q2) % 2 == 1) { r2 = S; } if (v[r1][r2]) { can = false; break; } steps++; v[r1][r2] = true; curX += dx; curY += dy; } if (!can) { cout << "The flea cannot escape from black squares." << endl; } else { cout << "After " << steps << " jumps the flea lands at (" << curX << ", " << curY << ")." << endl; } } return 0; }
- 1
信息
- ID
- 729
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 1
- 上传者