Кусочно-линейные функции | 프로그래밍의 벗 PivotOJ
PivotOJ

Кусочно-линейные функции

시간 제한: 3000ms메모리 제한: 1024MB출처: ICPC 2022-2023 Northwestern Russia QualificationBOJ 26065
이 문제는 본문 이미지 일부가 표시되지 않습니다. 텍스트만으로 풀이가 어려울 수 있습니다.

문제

Вадим --- большой фанат кусочно-линейных функций. Они имеют свои ограничения, и не любую функцию можно представить как кусочно-линейную. Вадим вам с радостью расскажет, что это такое.

Функция называется кусочно-линейной, если её график можно представить ломаной из nn вершин. А именно, она задаётся nn парами чисел (x1,y1),(x2,y2),,(xn,yn)(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n), которые являются координатами вершин ломаной. Обязательно должно выполняться условие x1<x2<x3<<xn.x_1 < x_2 < x_3 < \ldots < x_n.

Этот набор точек задаёт функцию от одного аргумента, значение которой в xix_i равно yiy_i, а на промежутках между этими точками она линейная. Область определения такой функции --- это отрезок [x1,xn][x_1, x_n].

Валя придумал свой класс функций с одной переменной, которые он назвал модульными. Модульная функция состоит из nn слагаемых, каждое из которых имеет один из двух видов: aix+bi|a_i \cdot x + b_i| или aix+bi-|a_i \cdot x + b_i|. Здесь xx --- переменная, а aia_i и bib_i --- параметры функции, а | \ldots | обозначает взятие по модулю. Таким образом, модульная функция с nn слагаемыми имеет вид ±a1x+b1±a2x+b2±±anx+bn.\pm|a_1 x + b_1| \pm |a_2 x + b_2| \pm \ldots \pm |a_n x + b_n|.

Вадим захотел проверить, не хуже ли модульные функции его любимых кусочно-линейных. Он принёс кусочно-линейную функцию с nn вершинами. Постарайтесь теперь найти модульную функцию с ровно nn слагаемыми, которая будет тождественна равна данной кусочно-линейной на отрезке [x1,xn][x_1, x_n].

입력

В первой строке дано целое число nn --- количество вершин ломаной (2n105)(2 \le n \le 10^5).

Далее идёт nn строк, в каждой из которых через пробел даны два целых числа xix_i, yiy_i --- координаты очередной вершины (105xi,yi105-10^5 \le x_i, y_i \le 10^5).

Гарантируется, что координаты xix_i идут строго по возрастанию, то есть x1<x2<x3<<xn.x_1 < x_2 < x_3 < \ldots < x_n.

출력

Выведите в единственной строке модульную функцию из ровно nn слагаемых, тождественно равную данной кусочно-линейно функции на отрезке [x1,xn][x_1, x_n]. Придерживайтесь формата, показанного в примерах.

Функция должна состоять из nn слагаемых aix+bi|a_i x + b_i|, разделённых знаками + и - (коды 43 и 45). Разрешается перед первым слагаемым поставить ведущий минус. Каждое слагаемое должно быть взято по модулю двумя символами | (код 124). Внутри слагаемого должен быть знак + (или -, если bib_i отрицательно). Левый операнд состоит из вещественного числа aia_i и переменной xx (код 120); знак умножения между ними не нужно писать, он подразумевается. Опускать aia_i или bib_i нельзя, даже если ai=1a_i = 1 или bi=0b_i = 0; нельзя также опускать левый операнд, если ai=0a_i = 0.

Таких слагаемых должно быть ровно nn. Разрешено использовать слагаемые, тождественно равные нулю. Они могут быть записаны как |0x+0|.

Размер выходного файла должен быть не больше 88 МБ. Ответ считается правильным, если в любой точке отрезка [x1,xn][x_1, x_n] значение вашей модульной функции отличается от значения данной кусочно-линейной не более, чем на 0.010.01.

힌트

Иллюстрация к третьему примеру:

[이미지 1]

예제

예제 1

입력
2
1 0
2 1
출력
-|0x-1|+|1x+0|

예제 2

입력
2
0 1
1 2
출력
|1x-0|+|0x+1|

예제 3

입력
3
-1 1
0 -1
1 0
출력
|-0.5x+1|-|0x-2|+|-1.5x-0|
코드를 제출하려면 로그인하세요.