結果
| 問題 | No.205 マージして辞書順最小 |
| コンテスト | |
| ユーザー |
togatoga
|
| 提出日時 | 2015-08-24 23:25:30 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 5,000 ms |
| コード長 | 1,339 bytes |
| 記録 | |
| コンパイル時間 | 1,409 ms |
| コンパイル使用メモリ | 166,608 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-18 13:11:54 |
| 合計ジャッジ時間 | 1,976 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 15 |
ソースコード
#include <bits/stdc++.h>
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<long,long> pll;
const int INF=1<<29;
const double EPS=1e-9;
const int MOD = 100000007;
const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
int N;
vector<string> S;
bool compare(const string &tmp1, const string &tmp2, int pos){
if (pos >= tmp1.size()){
return false;
}
if (pos >= tmp2.size()){
return true;
}
if (tmp1[pos] == tmp2[pos]){
return compare(tmp1, tmp2, pos + 1);
}
return tmp1[pos] < tmp2[pos];
}
int calc(){
string tmp = S[0];
int index = 0;
for (int i = 1; i < S.size(); i++){
if (compare(S[i], tmp, 0)){
tmp = S[i];
index = i;
}
}
return index;
}
int main(){
cin >> N;
S.resize(N);
for (int i = 0; i < N; i++){
cin >> S[i];
}
string res = "";
while (true){
int index = calc();
if (S[index].size() == 1){
res += S[index][0];
S.erase(S.begin() + index);
}else{
res += S[index][0];
string tmp = S[index].substr(1);
S.erase(S.begin() + index);
S.push_back(tmp);
}
if (S.size() == 0)break;
}
cout << res << endl;
}
togatoga