Yuulis.log

Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 394 B - cat | 緑コーダーが解くAtCoder

atcoder.jp

配点: 200 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 30

問題概要

英小文字からなる  N 個の文字列が与えられるので、これらの文字列を長さの昇順に並べ替え、この順に結合して得られる文字列を求めよ。

制約

  •  2 \leq N \leq 50
  •  N は整数。
  •  S_i の長さは  1 以上  50 で、互いに相異なる。

考察

単純に  Ssortすると辞書順でのソートになってしまうので、「長さ」のみでソートする必要がある。

ただ、sortの比較関数を書くのが面倒くさいので、  (S の長さ, S) という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;
}

atcoder.jp

実装時間: 5分以内

コメント

B問題はこういうので良いんだよ。