/* 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
{
static boolean[][] arr = {
{false, false, true, false, true},
{true, false, true, false, false},
{false, true, false, false, false},
{false, false, false, false, false},
{true, true, true, true, true}};
public static boolean hasTrue(int startX, int startY, int endX, int endY){
for (int i = startY; i <= endY; i++)
for (int j = startX; j <= endX; j++)
if (arr[i][j])
return true;
return false;
}
public static int calcCount(int startX, int startY, int endX, int endY) {
int count = 0;
for (int i = startY; i <= endY; ++i)
for (int j = startX; j <= endX; ++j)
if (arr[i][j])
++count;
return count;
}
public static int countTrues(int startX, int startY, int endX, int endY){
//Проверяем на наличие true
if (!hasTrue(startX, startY, endX, endY))
return 0;
//Если рассматриваем строку, столбец или один элемент,
//то просто обычным циклом подсчитаем кол-во true
if (startX == endX || startY == endY)
return calcCount(startX, startY, endX, endY);
int count = 0;
int tEndX = (startX + endX) / 2;
int tEndY = (startY + endY) / 2;
//Подсчитываем true в левой верхней части матрицы
count += countTrues(startX, startY, tEndX, tEndY);
//В правой нижней части
count += countTrues(tEndX + 1, tEndY + 1, endX, endY);
//В левой нижней
count += countTrues(startX, tEndY + 1, tEndX, endY);
//И в правой нижней части
count += countTrues(tEndX + 1, startY, endX, tEndY);
return count;
}
public static void main
(String[] args
) { System.
out.
println(countTrues
(0,
0,
4,
4)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBib29sZWFuW11bXSBhcnIgPSB7CiAgICAgICAge2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWV9LAogICAgICAgIHt0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfSwKICAgICAgICB7ZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9LAogICAgICAgIHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9LAogICAgICAgIHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfX07CiAgICAgICAgCiAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzVHJ1ZShpbnQgc3RhcnRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWCwgaW50IGVuZFkpewogICAgICAgIGZvciAoaW50IGkgPSBzdGFydFk7IGkgPD0gZW5kWTsgaSsrKQogICAgICAgICAgICBmb3IgKGludCBqID0gc3RhcnRYOyBqIDw9IGVuZFg7IGorKykKICAgICAgICAgICAgICAgIGlmIChhcnJbaV1bal0pIAogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBpbnQgY2FsY0NvdW50KGludCBzdGFydFgsIGludCBzdGFydFksIGludCBlbmRYLCBpbnQgZW5kWSkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0WTsgaSA8PSBlbmRZOyArK2kpCiAgICAgICAgICAgIGZvciAoaW50IGogPSBzdGFydFg7IGogPD0gZW5kWDsgKytqKQogICAgICAgICAgICAgICAgaWYgKGFycltpXVtqXSkgCiAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50VHJ1ZXMoaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSwgaW50IGVuZFgsIGludCBlbmRZKXsKICAgICAgICAvL9Cf0YDQvtCy0LXRgNGP0LXQvCDQvdCwINC90LDQu9C40YfQuNC1IHRydWUKICAgICAgICBpZiAoIWhhc1RydWUoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkpKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAvL9CV0YHQu9C4INGA0LDRgdGB0LzQsNGC0YDQuNCy0LDQtdC8INGB0YLRgNC+0LrRgywg0YHRgtC+0LvQsdC10YYg0LjQu9C4INC+0LTQuNC9INGN0LvQtdC80LXQvdGCLCAKICAgICAgICAvL9GC0L4g0L/RgNC+0YHRgtC+INC+0LHRi9GH0L3Ri9C8INGG0LjQutC70L7QvCDQv9C+0LTRgdGH0LjRgtCw0LXQvCDQutC+0Lst0LLQviB0cnVlCiAgICAgICAgaWYgKHN0YXJ0WCA9PSBlbmRYIHx8IHN0YXJ0WSA9PSBlbmRZKQogICAgICAgICAgICByZXR1cm4gY2FsY0NvdW50KHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZKTsKICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgIGludCB0RW5kWCA9IChzdGFydFggKyBlbmRYKSAvIDI7CiAgICAgICAgaW50IHRFbmRZID0gKHN0YXJ0WSArIGVuZFkpIC8gMjsKICAgICAgICAvL9Cf0L7QtNGB0YfQuNGC0YvQstCw0LXQvCB0cnVlINCyINC70LXQstC+0Lkg0LLQtdGA0YXQvdC10Lkg0YfQsNGB0YLQuCDQvNCw0YLRgNC40YbRiwogICAgICAgIGNvdW50ICs9IGNvdW50VHJ1ZXMoc3RhcnRYLCBzdGFydFksIHRFbmRYLCB0RW5kWSk7CiAgICAgICAgLy/QkiDQv9GA0LDQstC+0Lkg0L3QuNC20L3QtdC5INGH0LDRgdGC0LgKICAgICAgICBjb3VudCArPSBjb3VudFRydWVzKHRFbmRYICsgMSwgdEVuZFkgKyAxLCBlbmRYLCBlbmRZKTsKICAgICAgICAvL9CSINC70LXQstC+0Lkg0L3QuNC20L3QtdC5CiAgICAgICAgY291bnQgKz0gY291bnRUcnVlcyhzdGFydFgsIHRFbmRZICsgMSwgdEVuZFgsIGVuZFkpOwogICAgICAgIC8v0Jgg0LIg0L/RgNCw0LLQvtC5INC90LjQttC90LXQuSDRh9Cw0YHRgtC4CiAgICAgICAgY291bnQgKz0gY291bnRUcnVlcyh0RW5kWCArIDEsIHN0YXJ0WSwgZW5kWCwgdEVuZFkpOwogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KICAgICAgICAKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnRUcnVlcygwLCAwLCA0LCA0KSk7Cgl9Cn0=