頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC128 B - Guidebook

問題はこちら atcoder.jp

方針

S_i を辞書順にソート→ P_i を高い順にソート」という方針で解けそうですが,市名,点数,レストランの番号の3変数をどう扱うか。

ということで,tupleを使ってみました。

解説PDF では,pairを入れ子にして3変数を扱っています。どちらが楽かは好みだと思います。

コード

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

int main(){
    int n;
    cin>>n;

    string s;
    int p;
    vector<tuple<string,int,int>> r;
    for(int i=0; i<n; i++){
        cin>>s>>p;
        r.emplace_back(s,100-p,i);
    }

    sort(r.begin(),r.end());

    // (0から数えて)2番目の変数を取り出す
    for(int i=0; i<n; i++){
        cout<<get<2>(r[i])+1<<endl;
    }
}