【AtCoder】ABC 394 B - cat | 緑コーダーが解くAtCoder
配点: 200 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 30
問題概要
英小文字からなる 個の文字列が与えられるので、これらの文字列を長さの昇順に並べ替え、この順に結合して得られる文字列を求めよ。
制約
は整数。
の長さは
以上
で、互いに相異なる。
考察
単純に を
sortすると辞書順でのソートになってしまうので、「長さ」のみでソートする必要がある。
ただ、sortの比較関数を書くのが面倒くさいので、 という
pair型の配列を持っておき、1番目の要素で昇順ソートする。
その後、2番目の要素を前から順に結合していけばよい。
実装例
#include <bits/stdc++.h> using namespace std; #define all(x) (x).begin(), (x).end() #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // int main() { int N; cin >> N; vector<pair<int, string>> v(N); rep(i, 0, N) { string S; cin >> S; v[i] = make_pair(S.size(), S); } sort(all(v)); rep(i, 0, N) cout << v[i].second; cout << endl; return 0; }
実装時間: 5分以内
コメント
B問題はこういうので良いんだよ。