結果
問題 | No.1630 Sorting Integers (Greater than K) |
ユーザー |
|
提出日時 | 2021-07-30 21:28:07 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 13 ms / 2,000 ms |
コード長 | 4,576 bytes |
コンパイル時間 | 2,305 ms |
コンパイル使用メモリ | 179,756 KB |
実行使用メモリ | 5,504 KB |
最終ジャッジ日時 | 2024-09-15 23:01:57 |
合計ジャッジ時間 | 3,816 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 22 |
ソースコード
#pragma GCC optimize ("Ofast")#include<bits/stdc++.h>using namespace std;inline int my_getchar(){static char buf[1048576];static int s = 1048576;static int e = 1048576;if(s == e && e == 1048576){e = fread(buf, 1, 1048576, stdin);s = 0;}if(s == e){return EOF;}return buf[s++];}inline void rd(int &x){int k;int m=0;x=0;for(;;){k = my_getchar();if(k=='-'){m=1;break;}if('0'<=k&&k<='9'){x=k-'0';break;}}for(;;){k = my_getchar();if(k<'0'||k>'9'){break;}x=x*10+k-'0';}if(m){x=-x;}}inline void rd(char &c){int i;for(;;){i = my_getchar();if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){break;}}c = i;}inline int rd(char c[]){int i;int sz = 0;for(;;){i = my_getchar();if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){break;}}c[sz++] = i;for(;;){i = my_getchar();if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){break;}c[sz++] = i;}c[sz]='\0';return sz;}struct MY_WRITER{char buf[1048576];int s;int e;MY_WRITER(){s = 0;e = 1048576;}~MY_WRITER(){if(s){fwrite(buf, 1, s, stdout);}}};MY_WRITER MY_WRITER_VAR;void my_putchar(int a){if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){fwrite(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);MY_WRITER_VAR.s = 0;}MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;}inline void wt_L(char a){my_putchar(a);}inline void wt_L(int x){int s=0;int m=0;char f[10];if(x<0){m=1;x=-x;}while(x){f[s++]=x%10;x/=10;}if(!s){f[s++]=0;}if(m){my_putchar('-');}while(s--){my_putchar(f[s]+'0');}}inline void wt_L(const char c[]){int i=0;for(i=0;c[i]!='\0';i++){my_putchar(c[i]);}}int A[11];int D[11];int N;int KN;int* B = &A[1];char K[500011];char ans[500011];int asz = 0;int main(){int j;rd(N);KN = rd(K);{int PiIOrLma;for(PiIOrLma=(0);PiIOrLma<(9);PiIOrLma++){rd(B[PiIOrLma]);}}int i = 0;if(N < KN){wt_L(-1);wt_L('\n');exit(0);}if(N > KN){for(i=(1);i<(10);i++){while(A[i]--){ans[asz++] = i + '0';}}wt_L(ans);wt_L('\n');exit(0);}int goodidx = -1;for(i=(0);i<(KN);i++){int j;int cd = K[i]-'0';bool good = false;for(j=(cd+1);j<(10);j++){if(D[j] < A[j]){good = true;}}if(good){goodidx = i;}++D[cd];if(D[cd] > A[cd]){break;}}if(goodidx == -1){wt_L(-1);wt_L('\n');exit(0);}memset(D, 0, sizeof(D));for(i=(0);i<(goodidx);i++){int cd = K[i]-'0';++D[cd];ans[asz++] = K[i];}int cd = K[goodidx]-'0';for(j=(cd+1);j<(10);j++){if(D[j] < A[j]){D[j]++;ans[asz++] = j + '0';break;}}for(i=(1);i<(10);i++){if(A[i] < D[i]){continue;}A[i] -= D[i];}for(i=(1);i<(10);i++){while(A[i]--){ans[asz++] = i + '0';}}wt_L(ans);wt_L('\n');return 0;}// cLay version 20210405-1// --- original code ---// //no-unlocked// int A[11], D[11], N, KN;// int * B = &A[1];// char K[500011];// char ans[500011];// int asz = 0;//// {// rd(N, K@KN, B(9));// int i = 0;// if(N < KN){// wt(-1);// exit(0);// }// if(N > KN){// rep(i, 1, 10){// while(A[i]--){// ans[asz++] = i + '0';// }// }// wt(ans);// exit(0);// }// int goodidx = -1;// rep(i, KN){// int cd = K[i]-'0';// bool good = false;// rep(j, cd+1, 10){// if(D[j] < A[j]) good = true;// }// if(good) goodidx = i;// ++D[cd];// if(D[cd] > A[cd]) break;// }// if(goodidx == -1){// wt(-1);// exit(0);// }// memset(D, 0, sizeof(D));// rep(i, goodidx){// int cd = K[i]-'0';// ++D[cd];// ans[asz++] = K[i];// }// int cd = K[goodidx]-'0';// rep(j, cd+1, 10) if(D[j] < A[j]){// D[j]++;// ans[asz++] = j + '0';// break;// }// rep(i, 1, 10){// if(A[i] < D[i]) continue;// A[i] -= D[i];// }// rep(i, 1, 10){// while(A[i]--){// ans[asz++] = i + '0';// }// }// wt(ans);// }