結果
問題 | No.38 赤青白ブロック |
ユーザー | scache |
提出日時 | 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; } }