結果
問題 | No.1630 Sorting Integers (Greater than K) |
ユーザー |
|
提出日時 | 2021-07-30 21:36:38 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 23 ms / 2,000 ms |
コード長 | 3,354 bytes |
コンパイル時間 | 1,979 ms |
コンパイル使用メモリ | 177,880 KB |
実行使用メモリ | 5,664 KB |
最終ジャッジ日時 | 2024-09-15 23:17:45 |
合計ジャッジ時間 | 3,141 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main(){int N;string K;cin >> N;cin >> K;vector<int> c(10);for(int i = 1; i < 10; i++) cin >> c[i];string ma;for(int i = 9; i >= 0; i--){for(int k = 0; k < c[i]; k++){ma += ('0' + i);}}bool flag = false;if(N > K.size()) flag = true;else if(ma.size() == K.size()){for(int i = 0; i < ma.size(); i++){if(ma[i] > K[i]){flag = true;break;}else if(ma[i] < K[i]){break;}}}if(!flag) cout << -1 << endl;else{if(N > K.size()){string temp;for(int i = 0; i < 10; i++){for(int j = 0; j < c[i]; j++){temp += '0' + i;}}cout << temp << endl;return 0;}int sz = K.size();string ans;vector<int> cnt(10);for(int i = 0; i < sz; i++){cnt[K[i] - '0']++;}bool f = true;for(int i = 0; i < 10; i++){if(c[i] != cnt[i]){f = false;break;}}if(f){set<int> s;for(int i = sz - 1; i >= 0; i--){auto ite = s.lower_bound(K[i] - '0' + 1);if(ite != s.end()){for(int j = i + 1; j < sz; j++){if(K[j] - '0' == *ite){swap(K[i], K[j]);sort(K.begin() + i + 1, K.end());cout << K << endl;return 0;}}}s.insert(K[i] - '0');}}for(int i = 0; i < sz; i++){int ind = K[i] - '0';if(c[ind] == 0){bool f = false;for(int j = ind + 1; j < 10; j++){if(c[j] > 0){ans += '0' + j;c[j]--;f = true;break;}}if(!f){int siz = ans.size();for(int j = siz - 1; j >= 0; j--){int id = ans[j] - '0';bool f = false;for(int k = id + 1; k < 10; k++){if(c[k] > 0){ans[j] = '0' + k;c[id]++;c[k]--;f = true;break;}}if(f) break;c[id]++;ans.pop_back();}}for(int j = 0; j < 10; j++){for(int k = 0; k < c[j]; k++){ans += '0' + j;}}cout << ans << endl;return 0;}else{ans += '0' + ind;c[ind]--;}}}}