begin
var N, A, B, C, D: integer;
Readln(N, A, B, C, D);
if A > C then (A, B, C, D) := (C, D, B, A);
var s := 1.To(A - 1);
if B < C then // ( ) [ ]
s := s + B.Downto(A) + (B + 1).To(C - 1) +
D.Downto(C) + (D + 1).To(N)
else
if D < B then // ( [ ] )
begin
s := s + SeqGen(C - A, t -> B - t) +
SeqGen(D - C + 1, t -> t + A + B - D) +
SeqGen(B - D, t -> A - t + B - D - 1) + (B + 1).To(N)
end
else // ( [ ) ]
begin
s := s + SeqGen(C - A, t -> B - t) +
SeqGen(D - B, t -> D - t) + SeqGen(B - C + 1, t -> A + t) +
(D + 1).To(N);
end;
s.Println;
end.
Нумерация битов, чтоб было понятнее, 7654 3210
68 в двоичной это 0100 0100
36 в двоичной это 0010 0100
Теперь порассуждаем.
X&68 не будет равно нулю только при условии, что либо бит 2 равен одному, либо бит 6.
X&36 = 0 если бит 5 и бит 2 тоже равны нулю.
Получается. что чтобы выражение было истинным (X&68 != 0) -> (X&36 = 0), необходимо чтобы в числе бит 6 был равен единице, а биты 5 и 2 - нулям, то есть число X имеет вид ?10? ?0??
В этом случае, чтобы было истинным выражение X&A = 0, в A бит 6 должен быть нулем, биты 5 и 2 могут быть и нулем, и единицами, а все остальные должны быть нулями. Поэтому подходящие под А числа:
0000 0000 - 0
0000 0100 - 4
0010 0000 - 32
0010 0100 - 36
Ну а дальше зависит от того, считать ли 0 натуральным. Если не считать - то ответ А = 4
A) Оператор цикла: for
B) Количество повторений: 2
C) S = 3