P1428 小鱼比可爱 (洛谷)

684 字
3 分钟
P1428 小鱼比可爱 (洛谷)

题目描述#

人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

输入格式#

第一行输入一个正整数 nn,表示鱼的数目。

第二行内输入 nn 个非负整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 aia_i

输出格式#

一行,输出 nn 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

输入输出样例 #1#

输入 #1#

6
4 3 0 5 1 2

输出 #1#

0 0 0 3 1 2

说明/提示#

对于 100%100\% 的数据,1n1001 \leq n\leq 1000ai100 \leq a_i \leq 10


题解与分析#

解题突破口

观察到数据范围 n100n \leq 100 非常小。对于这种较小的数据量,我们可以直接使用时间复杂度为 O(n2)\mathcal{O}(n^2) 的**双重循环(暴力枚举)**来解决。

具体思路如下:

  1. 首先,我们将所有小鱼的可爱程度存储在一个数组(或列表)中。
  2. 外层循环遍历每一只小鱼,假设当前小鱼的索引为 i
  3. 对于每一只小鱼 i,我们需要统计在它左边(即索引从 0i-1)有多少只小鱼的可爱程度严格小于它(a[j] < a[i])。
  4. 内层循环遍历 0i-1,用一个计数器 count 记录符合条件的小鱼数量。
  5. 将得到的 count 依次输出即可。

代码实现#

C++ 版本#

#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i]; // 读取所有小鱼的可爱程度
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < i; j++) { // 遍历左边的小鱼
if (a[j] < a[i]) count++;
}
cout << count << (i == n - 1 ? "" : " ");
}
return 0;
}

Python 版本#

n = int(input())
a = list(map(int, input().split()))
# 列表推导式配合 sum 统计左边比自己小的值的数量
result = [str(sum(1 for j in range(i) if a[j] < a[i])) for i in range(n)]
print(" ".join(result))
分类
标签
站点统计
文章
14
分类
4
标签
24
总字数
23,486
运行时长
0
最后活动
0 天前

文章目录