結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0