結果
問題 | No.1609 String Division Machine |
ユーザー |
![]() |
提出日時 | 2021-07-16 21:45:33 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 9 ms / 2,000 ms |
コード長 | 3,559 bytes |
コンパイル時間 | 2,337 ms |
コンパイル使用メモリ | 219,696 KB |
最終ジャッジ日時 | 2025-01-23 01:36:20 |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 37 |
ソースコード
#pragma GCC optimize("Ofast")#pragma GCC optimize("unroll-loops")#pragma GCC optimize("inline")#include<bits/stdc++.h>using namespace std;inline int my_getchar_unlocked(){static char buf[1048576];static int s = 1048576;static int e = 1048576;if(s == e && e == 1048576){e = fread_unlocked(buf, 1, 1048576, stdin);s = 0;}if(s == e){return EOF;}return buf[s++];}inline void rd(char &c){int i;for(;;){i = my_getchar_unlocked();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_unlocked();if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){break;}}c[sz++] = i;for(;;){i = my_getchar_unlocked();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_unlocked(buf, 1, s, stdout);}}};MY_WRITER MY_WRITER_VAR;void my_putchar_unlocked(int a){if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){fwrite_unlocked(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_unlocked(a);}inline void wt_L(const char c[]){int i=0;for(i=0;c[i]!='\0';i++){my_putchar_unlocked(c[i]);}}template<class T, class S> int arrCountVal(int N, T A[], S val){int i;int res = 0;for(i=(0);i<(N);i++){if(A[i]==val){res++;}}return res;}template<class S> int arrCountVal(string A, S val){int i;int res = 0;for(i=(0);i<(A.size());i++){if(A[i]==val){res++;}}return res;}int N;int sz;int cur;char S[100000+2];char nx[100000+2];char res[100000+2];int ind[256];int main(){int i;N = rd(S);for(i=(0);i<(N);i++){res[i] = S[i];}for(;;){for(i=('a');i<('z'+1);i++){ind[i] = -1;}for(i=(0);i<(N);i++){ind[S[i]] = i;}sz = 0;cur = 'z';for(i=(0);i<(N);i++){while(cur > 'a' && ind[cur] < i){cur--;}if(S[i] == cur){continue;}nx[sz++] = S[i];}if(arrCountVal(sz,nx,'?') < sz){N = sz;for(i=(0);i<(N);i++){S[i] = nx[i];}continue;}sz = 0;cur = 'z';for(i=(0);i<(N);i++){while(cur > 'a' && ind[cur] < i){cur--;}if(S[i] == '?'){while(res[sz] != '?'){sz++;}res[sz] = cur;}}break;}wt_L(res);wt_L('\n');return 0;}// cLay version 20210708-1// --- original code ---// int N, sz, cur;// char S[1d5+2], nx[];// char res[];// int ind[256];// {// rd(S@N);// rep(i,N) res[i] = S[i];// for(;;){// // S[N] = '\0'; puts(S);// rep(i,'a','z'+1) ind[i] = -1;// rep(i,N) ind[S[i]] = i;// sz = 0; cur = 'z';// rep(i,N){// while(cur > 'a' && ind[cur] < i) cur--;// if(S[i] == cur) continue;// nx[sz++] = S[i];// }// if(arrCountVal(sz,nx,'?') < sz){// N = sz;// rep(i,N) S[i] = nx[i];// continue;// }// sz = 0; cur = 'z';// rep(i,N){// while(cur > 'a' && ind[cur] < i) cur--;// if(S[i] == '?'){// while(res[sz] != '?') sz++;// res[sz] = cur;// }// }// break;// }// wt(res);// }