結果
問題 | No.1609 String Division Machine |
ユーザー |
👑 |
提出日時 | 2021-07-16 22:29:05 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 6 ms / 2,000 ms |
コード長 | 819 bytes |
コンパイル時間 | 121 ms |
コンパイル使用メモリ | 29,824 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-06 09:55:42 |
合計ジャッジ時間 | 1,160 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 37 |
ソースコード
#include <stdio.h>int main(){char S[100001];scanf("%s", S);int i, j, k, dp[27], l, r, m;for (i = 0, dp[0] = 0, k = 0; S[i] != 0; i++) {if (S[i] == '?') continue;l = 0;r = k + 1;while (l < r) {m = (l + r) / 2;if (dp[m] < S[i] - 'a' + 1) l = m + 1;else r = m;}dp[l] = S[i] - 'a' + 1;if (l > k) k++;}if (k == 0) {for (i = 0; S[i] != 0; i++) printf("a");printf("\n");fflush(stdout);return 0;}for (i--, dp[0] = 30, j = 0; i >= 0; i--) {if (S[i] == '?') {if (j < k) S[i] = 'a';else S[i] = 'a' + dp[j] - 1;} else {l = 0;r = j + 1;while (l < r) {m = (l + r) / 2;if (dp[m] > S[i] - 'a' + 1) l = m + 1;else r = m;}dp[l] = S[i] - 'a' + 1;if (l > j) j++;}}printf("%s\n", S);fflush(stdout);return 0;}