1 条题解
-
0
📝 题目大意
个人围成一圈,每人有一个名字和年龄(年龄互不相同)。从最年轻的人开始,按顺时针顺序输出所有人的名字。
💡 解题思路
- 题目分析:,数据范围极小,直接模拟即可。年龄互不相同保证了"最年轻的人"唯一确定。输入顺序就是顺时针顺序,所以不需要额外排序。
- 算法推导:
- 遍历输入,同时记录最小年龄
minAge及其对应的下标startIdx(即最年轻的人的位置)。 - 从
startIdx开始,按 的顺序依次输出名字,相当于将环形数组从起点展开。
- 遍历输入,同时记录最小年龄
- 边界与细节: 最大可达 ,
minAge初始值需设为足够大(如 )。 时模运算同样正确。
⏱️ 复杂度分析
- 时间复杂度:,一次遍历找最小值,一次遍历输出。
- 空间复杂度:,存储名字和年龄数组。
💻 标准代码 (C++)
#include <iostream> #include <vector> #include <string> using namespace std; int main() { int N; cin >> N; vector<string> name(N); vector<int> age(N); int minAge = 1e9 + 10; // 初始化为足够大的值(年龄最大 1e9) int startIdx = 0; // 最年轻的人的下标 for (int i = 0; i < N; i++) { cin >> name[i] >> age[i]; if (age[i] < minAge) { // 找到更年轻的人 minAge = age[i]; startIdx = i; // 更新起点下标 } } // 从最年轻的人开始,顺时针输出 N 个人的名字 for (int i = 0; i < N; i++) { cout << name[(startIdx + i) % N] << endl; // 取模实现环形遍历 } return 0; }
- 1
信息
- ID
- 720
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者