結果
| 問題 |
No.775 tatyamと素数大富豪(hard)
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2018-12-22 00:53:01 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,145 bytes |
| コンパイル時間 | 2,387 ms |
| コンパイル使用メモリ | 219,524 KB |
| 最終ジャッジ日時 | 2025-01-06 19:48:21 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 9 WA * 1 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int N, K;
int main() {
cin >> N >> K;
int Z = K;
vector< string > P(N);
for(int i = 0; i < N; i++) {
cin >> P[i];
}
vector< int > ord(N);
iota(begin(ord), end(ord), 0);
sort(begin(ord), end(ord), [&](const int &a, const int &b) {
if(P[a] + P[b] == P[b] + P[a]) return P[a].size() > P[b].size();
return P[a] + P[b] > P[b] + P[a];
});
string concat;
for(auto &p : ord) concat += P[p];
priority_queue< pair< string, vector< int > > > que;
que.emplace(concat, ord);
set< string > memo;
memo.emplace(concat);
K *= 2;
while(que.size() && K > 0) {
auto p = que.top().second;
--K;
que.pop();
for(int i = 0; i < ord.size(); i++) {
for(int j = i - 1; j >= 0; j--) {
if(P[p[i]] + P[p[j]] >= P[p[j]] + P[p[i]]) continue;
swap(p[i], p[j]);
string con;
for(auto &q : p) con += P[q];
if(memo.count(con)) continue;
memo.emplace(con);
que.emplace(con, p);
swap(p[i], p[j]);
break;
}
}
}
auto it = prev(memo.end());
while(Z--) cout << *it-- << endl;
}
ei1333333