愚直に数えるのが簡単だと思う。
問題概要
人の生徒のマラソン大会のタイム
が与えられる。
各生徒の順位を求めよ。具体的には各生徒 について、(
未満のタイムの個数) + 1 を求めよ。
制約
解法
各 に対して、具体的に「(
未満のタイムの個数) + 1」を求めることにしよう。
全体的に次のようなコードで実現できる。
for (int i = 0; i < N; ++i) { // A[i] よりも小さいものを数える int res = 0; for (int j = 0; j < N; ++j) { if (A[j] < A[i]) ++res; } // res + 1 が答え }
あとは、プログラム全体を整えよう。
コード
#include <bits/stdc++.h> 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 res = 0; for (int j = 0; j < N; ++j) { if (A[j] < A[i]) ++res; } cout << res + 1 << endl; } }