結果
| 問題 | No.1609 String Division Machine |
| コンテスト | |
| ユーザー |
hitonanode
|
| 提出日時 | 2021-07-16 22:55:36 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 2,000 ms |
| コード長 | 1,175 bytes |
| コンパイル時間 | 555 ms |
| コンパイル使用メモリ | 73,828 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2025-11-27 10:59:59 |
| 合計ジャッジ時間 | 1,992 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 38 |
ソースコード
#include <array>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)
#define IFOR(i, begin, end) for(int i=(end)-1,i##_begin_=(begin);i>=i##_begin_;i--)
#define REP(i, n) FOR(i,0,n)
#define IREP(i, n) IFOR(i,0,n)
int main() {
cin.tie(nullptr), ios::sync_with_stdio(false);
string Si;
cin >> Si;
array<char, 26> s;
int ng = 0, ok = 27;
string ret;
while (ok > ng + 1) {
int n = (ng + ok) / 2;
auto S = Si;
bool failed = false;
s.fill(0);
s[0] = n;
IREP(i, S.size()) {
auto &c = S[i];
if (c == '?') {
int t = 0;
while (!s[t]) t++;
c = 'a' + t;
} else {
int j = c - 'a';
while (j >= 0 and !s[j]) j--;
if (j < 0) {
failed = true;
break;
}
s[j]--;
s[c - 'a']++;
}
}
(failed ? ng : ok) = n;
if (!failed) ret = S;
}
cout << ret << '\n';
}
hitonanode