+----+---------------------+---------------------+
| n | без унарных минусов | с унарными минусами |
+----+---------------------+---------------------+
| 1 | 1 | 2 |
| 2 | 5 | 18 |
| 3 | 41 | 290 |
| 4 | 320 | 5'938 |
| 5 | 5'073 | 136'770 |
| 6 | 64'469 | 3'379'794 |
| 7 | 859'385 | 87'547'746 |
| 8 | 11'853'949 | 2'345'800'050 |
| 9 | 167'763'361 | 64'477'920'386 |
| 10 | 2'422'342'053 | 1'807'930'569'874 |
+----+---------------------+---------------------+
2 3
0 0
1 1
1 2
print ("%d %d" %(x2, y2))
Исходный массив
0 8 0 0 10
8 0 4 0 0
0 4 0 6 16
0 0 6 0 2
10 0 16 2 0
-- Шаг 1 -----
0 8 0 0 10
8 0 4 0 18
0 4 0 6 16
0 0 6 0 2
10 18 16 2 0
-- Шаг 2 -----
0 8 12 0 10
8 0 4 0 18
12 4 0 6 16
0 0 6 0 2
10 18 16 2 0
-- Шаг 3 -----
0 8 12 18 10
8 0 4 10 18
12 4 0 6 16
18 10 6 0 2
10 18 16 2 0
-- Шаг 4 -----
0 8 12 18 10
8 0 4 10 12
12 4 0 6 8
18 10 6 0 2
10 12 8 2 0
-- Шаг 5 -----
0 8 12 12 10
8 0 4 10 12
12 4 0 6 8
12 10 6 0 2
10 12 8 2 0
// Инициализируем C, надо заменить на ввод исходных данных
$C = array(1, 1, 1, 0, 0, 1, 1, 1, 0, 1);
$N = count($C);
// Добавляем в начало и конец нули
array_unshift($C, 0);
$C[] = 0;
// Создаём массив P, заполняем 0 и N+1 элементы нулями
$P[0] = 0;
$P[$N+1] = 0;
// Заполняем чётные ячейки
for ($i = 1; $i <= $N; $i += 2)
$P[$i+1] = $P[$i-1] ^ $C[$i];
// Заполняем нечётные ячейки
if (($N&1) == 0) {
// Вариант с чётным количеством ячеек
for ($i = $N; $i >= 1; $i -= 2)
$P[$i-1] = $P[$i+1] ^ $C[$i];
} else {
// Вариант с нечётным количеством ячеек
$P[1] = 0;
for ($i = 1; $i <= $N; $i -= 2)
$P[$i-1] = $P[$i+1] ^ $C[$i];
}
// Выводим результат
for ($i = 1; $i <= $N; $i++)
print $P[$i];
для i от 1 до N с шагом 2
P[i+1] = P[i-1] xor C[i];
Получили все предыдущие значения чётных ячеек.для i от N до 1 с шагом -2
P[i-1] = P[i+1] xor C[i];
P[1] = 0; // или 1
для i от 2 до N с шагом 2
P[i+1] = P[i-1] xor C[i];
SELECT count(*) AS x FROM records
WHERE (begin BETWEEN '{$newRecordBegin}' AND '{$newRecordEnd}') OR
('{$newRecordBegin}' BETWEEN begin AND end)
d = V[1]-V[0];
for (i = 1; i < N-1, i++) {
d1 = V[i+1]-V[i];
if (d < 0 && d1 > 0) {
// Локальный минимум V[i]
} else if (d > 0 && d1 < 0) {
// Локальный максимум V[i]
}
d = d1;
}
noise = 2; // Уровень шума, поставить нужное значение
t1 = 0; // Точка перехода к нулю
upDown = 0; // Направление движения до нуля, > 0 - вверх, < 0 - вниз, 0 - начало графика
d = V[1]-V[0];
if (abs(d) < noise)
d = 0;
for (i = 1; i < N-1, i++) {
d1 = V[i+1]-V[i];
if (abs(d1) < noise)
d1 = 0;
if (d < 0 && d1 > 0) {
// Локальный минимум V[i]
} else if (d > 0 && d1 > 0) {
// Локальный максимум V[i]
} else if (d != 0 && d1 == 0) {
t1 = i;
upDown = d;
} else if (d == 0 && d1 > 0 && upDown < 0) {
// Локальный минимум V[(t1+i)/2] или (V[t1]+V[i])/2
} else if (d == 0 && d1 < 0 && upDown > 0) {
// Локальный максимум V[(t1+i)/2] или (V[t1]+V[i])/2
}
d = d1;
}