結果
| 問題 |
No.1630 Sorting Integers (Greater than K)
|
| コンテスト | |
| ユーザー |
ゆきのん
|
| 提出日時 | 2021-07-30 21:18:16 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 38 ms / 2,000 ms |
| コード長 | 3,526 bytes |
| コンパイル時間 | 1,867 ms |
| コンパイル使用メモリ | 197,992 KB |
| 最終ジャッジ日時 | 2025-01-23 11:03:15 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 22 |
ソースコード
#include<bits/stdc++.h>
//#include<atcoder/all>
//#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace atcoder;
//using namespace boost::multiprecision;
#define fs first
#define sc second
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define ALL(A) A.begin(),A.end()
#define RALL(A) A.rbegin(),A.rend()
typedef long long ll;
typedef pair<int,int> P;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<typename T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
const ll mod=1e9 + 7;
const ll LINF=1ll<<60;
const int INF=1<<30;
int dx[]={0,1,0,-1,0,1,-1,1,-1};
int dy[]={0,0,1,0,-1,1,-1,-1,1};
int main(){
int n;
string s;cin >> n >> s;
vector<int> c(10, 0);
for (int i = 0; i < 9; i++) {
cin >> c[i + 1];
}
if(s.length() > n){
puts("-1");
return 0;
}
else if(s.length() < n){
for (int i = 0; i < n; i++) {
for (int j = 0; j < 10; j++) {
if(c[j] > 0){
c[j]--;
cout << j;
break;
}
}
}
cout<< endl;
return 0;
}
string ans = "";
auto b = c;
string p = "";
for (int i = 0; i <= n; i++) {
bool f = true;
if(i < n){
if(b[s[i] - '0'] > 0){
ans += s[i];
b[s[i]-'0']--;
f = false;
}
else{
bool ff = true;
for (int j = s[i]-'0'+1; j < 10; j++) {
if(b[j] > 0){
b[j]--;
p = '0' + j;
ans += p;
ff = false;
break;
}
}
if(not ff){
for (int k = i + 1; k < n; k++) {
for (int l = 0; l < 10; l++) {
if(b[l] > 0){
p = '0' + l;
ans += p;
b[l]--;
break;
}
}
}
cout << ans << endl;
return 0;
}
}
}
if(f){
for (int j = i - 1; j >= 0; j--) {
bool ff = true;
ans.pop_back();
b[s[j] - '0']++;
for (int k = s[j] - '0' + 1; k < 10; k++) {
if(b[k] > 0){
p = '0' + k;
ans += p;
ff = false;
b[k]--;
break;
}
}
if(not ff){
for (int k = j + 1; k < n; k++) {
for (int l = 0; l < 10; l++) {
if(b[l] > 0){
p = '0' + l;
ans += p;
b[l]--;
break;
}
}
}
cout << ans << endl;
return 0;
}
}
puts("-1");
return 0;
}
}
return 0;
}
ゆきのん