ABC142 C - Go to School
問題はこちら
atcoder.jp
方針
問題文を読むと,出席番号 番の生徒は 番目に登校したことが分かります。つまりこれを変換して, 番目に登校した生徒の出席番号 を出力する配列を作れば終わりなのですが,ここで頭が混乱してしまいました。
ということでC++のレファレンスを調べていると,vector<pair>で2要素をペアにして扱えるらしいことが分かったので,そちらを使って実装しています。firstに ,secondに の情報が入っています。この状態でsortすると,firstが小さい順 secondが小さい順でソートされます。
なお,AtCoderの解説PDFでは,最初に示した方法が華麗に実装されています。ちょっと悔しいですがvector<pair>を初めて使って勉強になった,ということで納得しておきます。
コード
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; vector<pair<int,int>> a(n); for(int i=0; i<n; i++){ cin>>a[i].first; a[i].second=i; } sort(a.begin(),a.end()); for(int i=0; i<n; i++){ cout<<a[i].second+1<<" "; } cout<<endl; }