动态数组+哈希映射解答
2026-08-12 22:22:43
发布于:上海
16阅读
0回复
0点赞
先看题目,大概要求输入每个同学的成绩,然后根据图片所示上下蛇形排列座位,最后输出小R (第一个同学) 坐哪里。
在此我先使用了动态数组存储了每个同学的成绩,然后使用sort函数进行降序排列,最后将数组中的成绩作为键,排名作为值存入哈希映射内。因为每个成绩都只有一个,所以这种方法成立。
接下来就简单了,直接查询小R (输入时第一个) 成绩的的值,然后通过取模行数判断小R所在行数。计算出行数后,还需判断行数的奇偶来确定在本行是从上至下还是从下至上排列,确定完毕后计算得出列数即可。
下面是完整AC程序 (列数计算方法在程序末尾) :
#include <bits/stdc++.h>
using namespace std;
int main() {
vector <int> all;//用列表先存储一遍数据,方便排序和知道排名
unordered_map <int,int> a;//查找时用哈希映射
int n,m;
cin >> n >> m;
for (int i = 0;i < n*m;i ++){
int each;
cin >> each;
all.push_back(each);
}
int r = all[0];//小R的成绩,排序前记录;
sort (all.begin(),all.end(),greater <int>());//按题意降序排列
for (int i = 0;i < n*m;i ++){
a[all[i]] = i;//将列表的每一项存入映射
}
int k = a[r];//小R的名次
//以下是行列计算部分
cout << k/n + 1 << ' ';
if ((k/n + 1) % 2 == 0) cout << n - k % n;
else cout << k % n + 1;
return 0;
}
题解到此结束,谢谢大家!
(给个赞呗)
全部评论 1
欢迎大家展示自己的解法
1周前 来自 上海
1






有帮助,赞一个