Оптимизация кода. - 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));

Объяснение кода листинга программы

  1. В данной строке происходит деление переменной i на 8 и результат присваивается переменной State[i div 8].
  2. Затем происходит операция побитового исключающего OR между полученным значением и числом 1, результат присваивается переменной (1 shl (i mod 8)).
  3. Полученное значение затем присваивается переменной State[i div 8].
  4. Таким образом, в результате выполнения данной строки, значение переменной State[i div 8] будет изменено согласно указанной логике.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5