当前位置:实例文章 » JAVA Web实例» [文章][USACO14DEC] Marathon G

[USACO14DEC] Marathon G

发布人:shili8 发布时间:2025-02-28 05:57 阅读次数:0

**Marathon G**

**USACO14DEC**

**题目描述**

在一个名为"Marathon"的城市里,住着n个人,每个人都有自己的跑步速度。每个人都想成为最快的人,但他们也希望能和朋友一起比赛。如果一个人比另一个人快,那么他就可以超越这个人并且获得更好的排名。

现在,我们需要计算出所有可能的排名顺序,并且输出每个人的排名。

**输入**

* n:代表城市里有多少个人* p:代表每个人跑步速度(从1到n)

**输出**

* 每个人的排名**代码示例**

cpp#include <iostream>
#include <vector>

using namespace std;

const int N =100000 +10;
typedef long long ll;

int n, m, k, T;
ll a[N], b[N];

void solve() {
 cin >> n;
 vector<ll> p(n +1);
 for (int i =1; i <= n; ++i) {
 cin >> p[i];
 }

 vector<int> ans(n +1);

 int cnt =0;

 for (int i =1; i <= n; ++i) {
 if (!ans[i]) {
 ll mx =0;
 for (int j = i; j <= n && !ans[j]; ++j) {
 mx = max(mx, p[j]);
 ans[j] = cnt +1;
 }
 cnt++;
 }
 }

 for (int i =1; i <= n; ++i) {
 cout << ans[i] << " ";
 }
}

int main() {
 ios::sync_with_stdio(false);
 cin.tie(nullptr);

 int T =1;

 while (T--) {
 solve();
 }

 return0;
}


**注释**

* 本题目主要涉及到的是计算出所有可能的排名顺序,并且输出每个人的排名。
* 我们首先需要读入n和p,然后使用一个vector来存储ans。
* 然后,我们使用一个循环来遍历从1到n的数字,如果这个数字对应的值为0,那么我们就开始计算mx并且更新ans。
* 最后,我们输出每个人的排名。

**时间复杂度**

* 时间复杂度为O(n),因为我们需要读入n和p,然后使用一个循环来遍历从1到n的数字。

**空间复杂度**

* 空间复杂度为O(n),因为我们需要使用一个vector来存储ans。

其他信息

其他资源

Top