結果
| 問題 |
No.38 赤青白ブロック
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-05-01 22:29:11 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 603 ms / 5,000 ms |
| コード長 | 1,066 bytes |
| コンパイル時間 | 2,591 ms |
| コンパイル使用メモリ | 77,604 KB |
| 実行使用メモリ | 47,580 KB |
| 最終ジャッジ日時 | 2024-12-23 12:59:11 |
| 合計ジャッジ時間 | 12,127 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
package yukicoder;
import java.util.Scanner;
public class Main{
public static void main(String[] args)throws Exception{
new Main().solve();
}
boolean check(int kr,int kb,StringBuffer sb){
for(int i=0;i<sb.length();i++){
if(sb.charAt(i)=='R'&&i+kr<sb.length()&&sb.charAt(i+kr)=='R'){
return false;
}else if(sb.charAt(i)=='B'&&i+kb<sb.length()&&sb.charAt(i+kb)=='B'){
return false;
}
}
return true;
}
void solve(){
Scanner sc=new Scanner(System.in);
int kr=sc.nextInt();
int kb=sc.nextInt();
String s=sc.next();
int[] block=new int[20];
int tmp=0;
for(int i=0;i<30;i++){
if(s.charAt(i)=='R'||s.charAt(i)=='B'){
block[tmp]=i;
tmp++;
}
}
int ans=9999999;
for(int i=0;i<(1<<21);i++){
StringBuffer sb=new StringBuffer(s);
if(ans<=Integer.bitCount(i))continue;
for(int j=19;j>=0;j--){
if((1&(i>>j))==1){
sb=sb.deleteCharAt(block[j]);
}
}
// System.out.println(sb);
if(check(kr, kb, sb)){
ans=Math.min(ans,Integer.bitCount(i));
}
}
System.out.println(30-ans);
}
}