测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25145. 小球的重量

填空题 容易

题目描述

小球的重量

题目描述:

有 n 个小球,编号为 1 到 n,所有小球的重量均不相等。

按照编号顺序,依次给出 1 到 n - 1 号小球与其他小球的重量比较关系(< 表示小于,> 表示大于)。

请找出重量第 k 大的小球,并输出其编号。

例如:n = 4,有 4 个小球,比较关系如下:

1 号小球与 2、3、4 号小球的重量比较关系:小于 2 号,小于 3 号,大于 4 号;用 "< < >" 表示。

2 号小球与 3、4 号小球的重量比较关系:大于 3 号,大于 4 号;用 "> >" 表示。

3 号小球与 4 号小球的重量比较关系:大于 4 号;用 ">" 表示。

根据上述比较关系可得,按照重量由大到小排序后小球的编号分别为:2、3、1、4;当 k = 3 时,重量第 3 大的小球编号为 1。

输入描述:

共 n + 1 行;

第一行输入一个整数 n(1≤n≤2000),表示小球的数量;

第二行输入 n - 1 个字符,字符为 '>' 或 '<',依次表示 1 号小球与 2、3、...、n 号小球的重量比较关系;

第三行输入 n - 2 个字符,字符为 '>' 或 '<',依次表示 2 号小球与 3、4、...、n 号小球的重量比较关系;

... 第 n 行输入 1 个字符,字符为 '>' 或 '<',表示 n - 1 号小球与 n 号小球的重量比较关系;

以上输入中,同一行字符之间以一个空格隔开;

第 n + 1 行输入一个整数 k(1≤k≤n)。

输出描述:

输出一个整数,表示重量第 k 大的小球编号。

样例输入:

4
< < >
> >
>
3

样例输出:

1

参考答案

#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<vector<char>> comp(n, vector<char>(n, 0)); // 读取并构建比较矩阵 for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { cin >> comp[i][j]; comp[j][i] = (comp[i][j] == '<') ? '>' : '<'; } } // 计算比每个球重的数量 vector<int> heavierCount(n, 0); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i != j && comp[i][j] == '<') { heavierCount[i]++; } } } int k; cin >> k; for (int i = 0; i < n; i++) { if (heavierCount[i] == k - 1) { cout << i + 1; break; } } return 0; }

答案解析

构建比较矩阵,填充对称关系

统计比每个小球重的数量

第k大的小球满足:比它重的数量 = k-1

上一题 下一题