1 条题解
-
0
📝 题目大意
有 名用户,每名用户拥有用户名 和分数 。将所有用户名按字典序排序后依次分配编号 ,设总分 ,则编号为 的用户获胜,输出其用户名。
💡 解题思路
-
题目分析:,数据规模极小。用户名互不相同,分数 ,总分 最大约 ,完全在
int范围内。唯一需要处理的是字符串的字典序排序。 -
算法推导:
- 读入 ,将每个用户名存入数组
names,同时累加分数到total。 - 对
names数组按字典序排序(C++ 中std::sort默认对string按字典序升序排列)。 - 计算
winner_index = total % N。 - 输出
names[winner_index]。
- 读入 ,将每个用户名存入数组
-
边界与细节:
- 用户名互不相同,所以排序后索引唯一确定,无需处理同名冲突。
- 可能超过
int范围吗?最坏情况 ,,int完全够用(上限约 )。 - 注意编号从 开始,取模结果直接作为数组下标即可。
⏱️ 复杂度分析
- 时间复杂度:,来自排序。,几乎可以忽略。
- 空间复杂度:,存储 个字符串。
💻 标准代码 (C++)
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { int N; cin >> N; vector<string> names(N); // 存储所有用户名 int total = 0; // 分数总和 for (int i = 0; i < N; i++) { string s; int c; cin >> s >> c; names[i] = s; // 存入用户名 total += c; // 累加分数 } sort(names.begin(), names.end()); // 按字典序排序 int winner_index = total % N; // 计算获胜者编号 cout << names[winner_index] << endl; // 输出获胜者用户名 return 0; } -
- 1
信息
- ID
- 798
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者