結果
問題 | No.2276 I Want AC |
ユーザー |
![]() |
提出日時 | 2023-04-21 23:21:19 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 209 ms / 2,000 ms |
コード長 | 1,482 bytes |
コンパイル時間 | 1,219 ms |
コンパイル使用メモリ | 113,272 KB |
最終ジャッジ日時 | 2025-02-12 12:33:28 |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 56 |
ソースコード
#include <iostream>#include <vector>#include <algorithm>#include <map>#include <queue>#include <set>#include <random>#include <iomanip>#include <string>#include <cmath>#include <complex>using namespace std;typedef long long ll;#define rep(i, n) for(int i = 0; i < (n); i++)template<class T>using vi = vector<T>;template<class T>using vii = vector<vi<T>>;template<class T>using viii = vector<vii<T>>;using P = pair<ll, int>;void chmin(ll & x, ll y) { x = min(x, y); }void chmax(ll& x, ll y) { x = max(x, y); }ll calc(int n, string& s) {ll res = 0;ll ca = 0;rep(i, n) {if (s[i] == 'C') res += ca;else ca++;}return res;}string mk(int n, string s, int m) {string res = s;int cnt = 0;rep(i, n) {if (s[i] == '?') {if (cnt < m) res[i] = 'A';else res[i] = 'C';cnt++;}}return res;}int main(){int n; string s;cin >> n >> s;int mx = 0;rep(i, n) if (s[i] == '?') mx++;int ok = 0, ng = mx + 1;while (ng - ok > 2) {int m1 = ok + (ng - ok) / 3;int m2 = ok + (ng - ok) / 3 * 2;string s1 = mk(n, s, m1);string s2 = mk(n, s, m2);if (calc(n, s1) < calc(n, s2)) ok = m1;else ng = m2;}ll ans = 0;for (int i = ok; i < ng; i++) {string ns = mk(n, s, i);chmax(ans, calc(n, ns));}cout << ans << endl;return 0;}