結果
問題 | No.2553 Holidays |
ユーザー |
|
提出日時 | 2023-11-18 05:18:53 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 2,991 bytes |
コンパイル時間 | 2,118 ms |
コンパイル使用メモリ | 214,236 KB |
最終ジャッジ日時 | 2025-02-17 22:27:41 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 55 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n, m; cin >> n >> m;string s; cin >> s;assert(3 <= n && n <= 100000);assert(0 <= m && m <= n);s += "x";map<string, vector<int>> memo;for(int l = 0; l < n;){int r = l + 1;while(r < n && s[l] == s[r]) r++;if(s[l] == '-'){string t = "";if(l == 0) t += "x";else t += s[l - 1];t += s[r];t += ((r - l) % 2) + '0';memo[t].push_back(r - l);}l = r;}int ans = 0, can_ope = m, cnt = 0;for(int i = 0; i < n; i++){if(s[i] == 'o'){ans++;}}{sort(memo["oo1"].begin(), memo["oo1"].end());for(auto x : memo["oo1"]){int cost = x / 2;if(can_ope >= cost){ans += x;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);}}{for(auto x : memo["oo0"]){int cost = x / 2;if(can_ope >= cost){ans += x;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);}}{for(auto x : memo["ox0"]){int cost = x / 2;if(can_ope >= cost){ans += x;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);}}{for(auto x : memo["xo0"]){int cost = x / 2;if(can_ope >= cost){ans += x;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);}}{for(auto x : memo["ox1"]){int cost = x / 2;if(can_ope >= cost){ans += x - 1;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);cnt++;}}{for(auto x : memo["xo1"]){int cost = x / 2;if(can_ope >= cost){ans += x - 1;}else{ans += can_ope * 2;}can_ope = max(0, can_ope - cost);cnt++;}}{vector<int> xx;cnt += (int) memo["xx0"].size();for(auto x : memo["xx1"]) xx.push_back(x);for(auto x : memo["xx0"]) xx.push_back(x - 1);sort(xx.rbegin(), xx.rend());for(auto x : xx){int cost = (x + 1) / 2;if(can_ope >= cost){ans += x;}else{ans += max(0, can_ope * 2 - 1);}can_ope = max(0, can_ope - cost);}}// ox1, xo1, xx0 の残りans += min(can_ope, cnt);cout << ans << endl;}