Ïåðåáåð¼ì âñå öåëûå ÷èñëà x, óäîâëåòâîðÿþùèå íåðàâåíñòâó 0 ≤ x < L + d, è äëÿ êàæäîãî èç íèõ ïðîâåðèì, ÿâëÿåòñÿ ëè äàííîå ÷èñëî ðåøåíèåì çàäà÷è. Êàê ïðîâåðèòü, ÿâëÿåòñÿ ëè çàäàííîå ÷èñëî x ðåøåíèåì çàäà÷è? Äëÿ ýòîãî íóæíî ïðîâåðèòü, ÷òî íà êàæäîì ôàíòèêå öåëèêîì ðàñïîëîæåíà ðîâíî îäíà êàðòèíêà. Ââåä¼ì âåëè÷èíó pi ðàññòîÿíèå îò íà÷àëà i-ãî ôàíòèêà äî áëèæàéøåé êàðòèíêè, öåëèêîì ëåæàùåé ïðàâåå åãî íà÷àëà. Âåëè÷èíà pi õàðàêòåðèçóåò èçîáðàæåíèå íà i-ì ôàíòèêå, ò. å. òî, ÷òî íà í¼ì íàïå÷àòàíî.  êàêîì ñëó÷àå íà i-ì ôàíòèêå öåëèêîì ðàñïîëîæåíà ðîâíî îäíà êàðòèíêà? Áëèæàéøàÿ êàðòèíêà, öåëèêîì ëåæàùàÿ ïðàâåå íà÷àëà i-ãî ôàíòèêà, áóäåò öåëèêîì íàõîäèòüñÿ íà ýòîì ôàíòèêå, åñëè è òîëüêî åñëè pi + L ≤ W . À ñëåäóþùàÿ êàðòèíêà íå áóäåò öåëèêîì ðàñïîëàãàòüñÿ íà ýòîì ôàíòèêå â òîì è òîëüêî òîì ñëó÷àå, åñëè pi + 2L + d > W . Èòàê, íà i-ì ôàíòèêå öåëèêîì ðàñïîëîæåíà ðîâíî îäíà êàðòèíêà òîãäà è òîëüêî òîãäà, êîãäà W − 2L − d < pi ≤ W − L. Îñòàëîñü âû÷èñëèòü pi. Ìîæíî äîêàçàòü, ÷òî pi = (a − x − (i − 1)W ) mod (L + d). Òàêæå ìîæíî èñïîëüçîâàòü ôîðìóëû: p1 = (a − x) mod (L + d), pi+1 = (pi − W ) mod (L + d), i = 1, . . . , N − 1. Îòìåòèì, ÷òî ïðè âû÷èñëåíèè îñòàòêà îò äåëåíèÿ îòðèöàòåëüíîãî ÷èñëà íà äðóãîå ÷èñëî íåîáõîäèìî ïðèáàâèòü ê äåëèìîìó äîñòàòî÷íî áîëüøîå ÷èñëî, êðàòíîå äåëèòåëþ, ïîòîìó ÷òî ïðè íàõîæäåíèè îñòàòêà îò äåëåíèÿ îòðèöàòåëüíîãî ÷èñëà íà äðóãîå ÷èñëî îïåðàöèÿ mod ðàáîòàåò íåïðàâèëüíî. program var L, d, x, i, flag: cut; a, N, W: integer; p: integer; boolean; function mod2(a, b: integer): integer; begin while (a < 0) do a := a + b; Result := a mod b; end; begin read(L, d, a, N, W); 1 for x := 0 to L+d-1 do begin flag := true; for i := 1 to n do begin p := mod2(a-x-(i-1)*W, L+d); if (not ((p > W-2*L-d) and (p <= W-L))) then flag := false; end; if (flag) then begin write(x); break; end; end; end. 2