結果
| 問題 |
No.38 赤青白ブロック
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-03-30 16:54:50 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 655 ms / 5,000 ms |
| コード長 | 1,484 bytes |
| コンパイル時間 | 3,914 ms |
| コンパイル使用メモリ | 77,616 KB |
| 実行使用メモリ | 47,388 KB |
| 最終ジャッジ日時 | 2024-12-23 12:58:54 |
| 合計ジャッジ時間 | 21,750 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
import java.util.Scanner;
public class Main_yukicoder38 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int kr = sc.nextInt();
int kb = sc.nextInt();
char[] s = sc.next().toCharArray();
int max = 0;
for (int mask = 0; mask < 0x1 << 20; mask++) {
int ir = 0;
int ib = 0;
StringBuilder tmp = new StringBuilder();
for (int i = 0; i < s.length; i++) {
if (s[i] == 'R') {
if ((mask & 0x1 << ir++) != 0) {
continue;
}
} else if (s[i] == 'B') {
if ((mask & 0x1 << 10 + ib++) != 0) {
continue;
}
}
tmp.append(s[i]);
}
if (isOK(tmp, kr, kb)) {
max = Math.max(max, 30 - Integer.bitCount(mask));
}
}
System.out.println(max);
sc.close();
}
private static boolean isOK(StringBuilder s, int kr, int kb) {
int n = s.length();
for (int i = 0; i < n; i++) {
if (s.charAt(i) == 'R') {
if (i - kr >= 0 && s.charAt(i - kr) == 'R') {
return false;
}
if (i + kr < n && s.charAt(i + kr) == 'R') {
return false;
}
} else if (s.charAt(i) == 'B') {
if (i - kb >= 0 && s.charAt(i - kb) == 'B') {
return false;
}
if (i + kb < n && s.charAt(i + kb) == 'B') {
return false;
}
}
}
return true;
}
}