1 条题解
-
0
📝 题目大意
正五边形的顶点按顺序标号为 A、B、C、D、E。给定两对顶点 和 ,判断这两条线段的长度是否相等。
💡 解题思路
-
题目分析:正五边形只有 5 个顶点,任意两点间的线段长度仅取决于它们在五边形上的"最短步数"(即沿边行走的最少边数)。由于五边形是正多边形,步数相同的线段长度必然相等;步数不同的线段长度必然不等。可能的最短步数只有两种:1(相邻顶点)和 2(隔一个顶点)。
-
算法推导:
- 将字母
A~E映射为下标 ~(index函数)。 - 对于一对顶点 ,它们在环上的最短距离为 。这里 表示绕环另一方向走的步数。
- 分别计算 的距离 和 的距离 。
- 若 则输出
Yes,否则输出No。
- 将字母
-
边界与细节:
- 输入保证 ,,因此 不会为 。
- 因为只有 5 个点, 的取值只能是 或 ,直接比较即可。
- 注意环上距离要用
min(直接差, 5-直接差)来取较短的那条路径。
⏱️ 复杂度分析
- 时间复杂度:,仅常数次运算。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include <iostream> #include <string> #include <cmath> using namespace std; // 将字母 A~E 映射为下标 0~4 int index(char c) { return c - 'A'; } int main() { string s, t; cin >> s >> t; // 获取两对顶点的下标 int a = index(s[0]), b = index(s[1]); int x = index(t[0]), y = index(t[1]); // 环上最短距离:min(直接距离, 绕环另一方向距离) int d1 = min(abs(a - b), 5 - abs(a - b)); int d2 = min(abs(x - y), 5 - abs(x - y)); // 步数相同则长度相等 if (d1 == d2) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; } -
- 1
信息
- ID
- 759
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者