/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String[] args
) {
Ideone solver = new Ideone(
"煩悩煩悩煩煩悩煩\n" +
"煩煩悩空悩悩悩悩\n" +
"悩空悩空悩空悩煩\n" +
"空煩煩悩悩悩煩煩\n" +
"悩悩悩煩悩煩煩悩\n" +
"煩悩空空悩煩悩煩\n" +
"煩煩煩悩煩空悩煩");
solver.solve();
}
static final long BLOCK_MASK = 0b1100000011L;
final long bon;
final long bon_mask;
final long nou;
final long nou_mask;
long result;
int limit;
{
int i = 0;
long bon = 0;
long nou = 0;
for (char c : s.toCharArray())
{
switch (c)
{
case '煩': bon |= 1L << i; break;
case '悩': nou |= 1L << i; break;
// 修正ここから
case '空': break;
case '\r': case '\n': continue;
// 修正ここまで
// case '空': case '\r': case '\n': break; // バグコード
}
i++;
}
long bonnou = bon | nou;
long mask = 0L;
// 煩悩を消す必要がある部分を調べる
for (i = 0; i < 47; i++)
{
if ((i & 0x7) == 7) i++;
if ((bon & BLOCK_MASK << i) != 0 && (nou & BLOCK_MASK << i) != 0)
{
mask |= BLOCK_MASK << i;
}
}
mask &= bonnou;
this.bon = bon;
this.bon_mask = bon & mask;
this.nou = nou;
this.nou_mask = nou & mask;
// 最悪煩か悩のどちらかを全て消せば煩悩にならない。
int b
= Long.
bitCount(bon_mask
); int n
= Long.
bitCount(nou_mask
); if (b <= n)
{
limit = b;
result = bon_mask;
}
else
{
limit = n;
result = nou_mask;
}
}
void solve()
{
foo(0L, 0);
System.
out.
printf("鐘の数は %d 個です%nbefore:%n%s%n%nafter:%n%s%n", limit, toString
(), toString
(result
)); }
void foo(long remove, int i)
{
int count
= Long.
bitCount(remove
); if (count < limit)
{
while (i < 47)
{
if ((i & 7) == 7) i++;
long block_mask = BLOCK_MASK << i;
// 2x2ブロック内に煩と悩がある場合
// if ((bon_mask & block_mask & ~remove) != 1 && (nou_mask & block_mask & ~remove) != 1) // バグコード なんで1になってたんだw
if ((bon_mask & block_mask & ~remove) != 0 && (nou_mask & block_mask & ~remove) != 0)
{
foo(remove | bon_mask & block_mask, i + 1); // ブロック内の煩を消して進めてみる
foo(remove | nou_mask & block_mask, i + 1); // ブロック内の悩を消して進めてみる
return;
}
// 煩悩が無かったら次のブロックに進める
i++;
}
result = remove;
limit = count;
}
}
@Override
{
return toString(0L);
}
public String toString
(long remove
) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 56; i++)
{
if ((remove & 1L << i) != 0) sb.append("鐘");
else if ((bon & 1L << i) != 0) sb.append("煩");
else if ((nou & 1L << i) != 0) sb.append("悩");
else sb.append("空");
if ((i & 7) == 7 & i != 55) sb.append("\n");
}
return sb.toString();
}
}