けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 354 B - AtCoder Janken 2 (6Q, 灰色, 200 点)

文字列を辞書順にソートする方法を確認しておこう!

問題概要

 N 人のユーザーがいて、 i 人目の名前は  S_{i}、レーティングは  A_{i} である。

レーティングの総和を  N で割った余りを  r としたとき、各ユーザーの名前のうち、辞書順で小さい順に  r 番目のものを求めよ。

解法

 r 自体はすぐに求められる。

 N 個の文字列を辞書順に並び替えるにはどうしたらよいか」が問題であるが、実は多くのプログラミング言語では、単純に sort() 関数を用いるだけでよい!!

なぜなら、多くのプログラミング言語で、文字列の大小関係は、その辞書順で定義されているからだ!

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    vector<string> name(N);
    vector<long long> val(N);
    long long S = 0;
    for (int i = 0; i < N; ++i) {
        cin >> name[i] >> val[i];
        S += val[i];
    }
    sort(name.begin(), name.end());
    cout << name[S % N] << endl;
}