問題概要
- \(N\)個の文字列が与えられた時、それぞれの文字列の末尾から逆順に並べた辞書を作成しようとしている。
- 与えられた文字列から逆順に並べた辞書を作成し、元の文字列をその逆順辞書の順番で出力する。
制約
- \(1≤N≤100\)
- 文字列は全て英小文字からなる。
問題へのリンクはこちら
考えたこと
- 元の文字列を後ろから読んだ文字列と、元の文字列自身を一つのペアとして管理する。この時、
pair<string, string>
を使用するが、pairの第一引数には、反転させた文字列を入れるようにする。(理由は後述)
- 上で作成したpair文字列の組を配列に格納していく。
- 全てのpairを配列に入れ終わったら、配列を並び替える。この時、C++のstd::sortは、pairの第一引数を基準に並べ替えてくれる。そのため、上のようなpairの引数構成となっている。
書いたコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int N; cin >> N;
vector<pair<string, string> > v(N);
for(int i = 0; i < N; ++i) {
string s; cin >> s;
v[i].first = s;
v[i].second = s;
reverse(v[i].first.begin(), v[i].first.end());
}
sort(v.begin(), v.end());
for(int i = 0; i < N; ++i) {
cout << v[i].second << endl;
}
return 0;
}