結果
問題 | No.38 赤青白ブロック |
ユーザー |
|
提出日時 | 2021-02-25 16:12:34 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 274 ms / 5,000 ms |
コード長 | 1,022 bytes |
コンパイル時間 | 1,914 ms |
コンパイル使用メモリ | 193,608 KB |
最終ジャッジ日時 | 2025-01-19 04:29:39 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0; i<(int)(n); i++) int main() { ios_base::sync_with_stdio(0); cin.tie(0); int r, b; cin >> r >> b; string s; cin >> s; int sub = 0; for (int i = 0; i < s.length(); i++) { if (s[i] != 'W') sub |= 1 << i; } int ret = 0; int mask = sub; do { string t; for (int i = 0; i < s.length(); i++) { if (s[i] == 'W') t += 'W'; else if (mask & 1 << i) t += s[i]; } bool ck = true; for (int i = 0; i < t.length(); i++) { if (t[i] == 'R') { if (i-r >= 0 && t[i-r] == 'R') { ck = false; break; } } else if (t[i] == 'B') { if (i-b >= 0 && t[i-b] == 'B') { ck = false; break; } } } if (ck) { int tmp = __builtin_popcountll(mask); ret = max(ret, tmp); } --mask &= sub; } while (mask != sub); ret += count(s.begin(), s.end(), 'W'); cout << ret << endl; return 0; }