結果
| 問題 |
No.38 赤青白ブロック
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-10-13 00:12:26 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 768 ms / 5,000 ms |
| コード長 | 1,283 bytes |
| コンパイル時間 | 3,379 ms |
| コンパイル使用メモリ | 77,528 KB |
| 実行使用メモリ | 56,992 KB |
| 最終ジャッジ日時 | 2024-12-23 12:36:22 |
| 合計ジャッジ時間 | 13,534 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Main2 p = new Main2();
}
public Main2() {
Scanner sc = new Scanner(System.in);
int kr = sc.nextInt();
int kb = sc.nextInt();
String s = sc.next();
solve(kr, kb, s);
}
public void solve(int kr, int kb, String s) {
int res = rec(0, kr, kb, new StringBuilder(s));
System.out.println(res);
}
private int rec(int cur, int kr, int kb, StringBuilder s){
if(s.length()<=12)
return 12;
else if(ok(kr, kb, s))
return s.length();
else if(cur>=s.length())
return 0;
StringBuilder sb = new StringBuilder(s);
int res = 0;
if(s.charAt(cur)=='W'){
res = Math.max(res, rec(cur+1, kr, kb, sb));
}else{
char c = sb.charAt(cur);
sb.deleteCharAt(cur);
res = Math.max(res, rec(cur, kr, kb, sb));
sb.insert(cur, c);
res = Math.max(res, rec(cur+1, kr, kb, sb));
}
return res;
}
private boolean ok(int kr, int kb, StringBuilder s) {
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
if(c=='R' && i+kr<s.length() && s.charAt(i+kr)=='R')
return false;
else if(c=='B' && i+kb<s.length() && s.charAt(i+kb)=='B')
return false;
}
return true;
}
}