Оптимизация кода. - Pascal ABC
Формулировка задачи:
Задача.
Маша попала в уборную в торговом центре и решила поиграть с умывальниками. Умывальники расположены в ряд, в каждом из них либо течет вода, либо не течёт. За один раз Маша выбирает несколько подряд стоящих умывальников, открывает краны там, где вода не текла и закрывает там, где вода текла. Маше показалось скучным менять состояния всех подряд идущих умывальников, поэтому каждый раз она меняет состояния либо всех чётных, либо всех нечетных умывальников на подотрезке. Ваша задача – определить состояния всех умывальников после того, как Маша закончит играть. Формат вводаВ первой строке через пробел даны два целых числа n и m – количество умывальников и количество запросов, 1≤n,m≤2⋅10^5.
В следующих m строках даны описания запросов. В i-й строке даны три целых числа a, b и c, где [a,b] – подотрезок на котором Маша будет менять состояние умывальников ( 1≤a,b≤n), а c – четность умывальников ( c=0 или 1). Если c=0, значит Маша меняет состояние всех чётных умывальников, а если c=1 – всех нечетных. Четность умывальника определяется от начала всего массива. Первый умывальник нечётный, второй – чётный и так далее. Изначально, во всех умывальниках вода не течет.
Формат вывода
Выведите через пробел состояния всех умывальников после того, как Маша закончит играть.
Мой код
program umivalniki;
var N, M, a, b, c: integer;
s: string;
begin
readln(N, M);
for l: integer := 1 to N do s:=s+'0';
for z: integer := 1 to M do
begin
readln(a, b, c);
for i: integer := a to b do
if c=0 then
begin
if i mod 2 = 0 then if s[i]='0' then s[i]:='1' else s[i]:='0';
end else
begin
if i mod 2 = 1 then if s[i]='0' then s[i]:='1' else s[i]:='0';
end;
end;
for i: integer := 1 to n do
write(s[i], ' ');
end.
Как его оптимизировать? Решение задачи: «Оптимизация кода.»
textual
Листинг программы
State[i div 8]:=State[i div 8] xor (1 shl (i mod 8));
Объяснение кода листинга программы
- В данной строке происходит деление переменной i на 8 и результат присваивается переменной State[i div 8].
- Затем происходит операция побитового исключающего OR между полученным значением и числом 1, результат присваивается переменной (1 shl (i mod 8)).
- Полученное значение затем присваивается переменной State[i div 8].
- Таким образом, в результате выполнения данной строки, значение переменной State[i div 8] будет изменено согласно указанной логике.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д