Se dau puncte pe axa OX, numerotate de la la . Fiecare punct se află la coordonata şi are o pondere . Dorim să amplasam pe axa OX un interval închis de lungime , astfel încât maximul dintre distanţele ponderate de la puncte la interval să fie minim (această valoare se numeşte distanţa mini-maximă). Distanţa de la un punct la un interval se defineşte în felul următor:
- , dacă
- , dacă
- , dacă
Coordonatele şi ponderile fiecărui punct se generează conform următorului algoritm (unde şi şi sunt date în fişierul de intrare):
C = C1
for i = 2 to N do
x[i] = x[i-1] + 1 + (((x[i-1]· i) xor A) modulo B)
if (2·i <= N) then
k = 1
else
k = -1
w[i] = maxim(1, w[i-1] + k·(1 + (((w[i-1]·(i + C)) xor (D·i)) modulo D)))
C = 1 + ((((C·C) modulo D)·i) modulo D)
Cerinţă
Determinaţi distanţa mini-maximă, precum şi valoarea capătului stânga al intervalului pentru care se obţine această distanţă.
Date de intrare
Prima linie a fişierului de intrare center.in
conţine numerele întregi şi . A doua linie conţine numărul întreg . A treia linie conţine numerele întregi şi . Numerele de pe aceeaşi linie separate prin câte un spaţiu.
Date de ieșire
Prima linie a fişierului de ieşire center.out
va conţine distanţa mini-maximă pentru setul de puncte generat, iar a doua linie va conţine capătul stânga al intervalului de lungime pentru care se obţine această distanţă. Afişaţi capătul stânga cu cât mai multe zecimale (cel puţin ).
Restricții și precizări
- ;
- Nu se urmăreşte găsirea vreunei proprietăţi speciale a algoritmului de generare care să vă ajute să rezolvaţi problema (însă, dacă găsiţi o astfel de proprietate, o puteţi folosi).
- Primiţi punctajul corespunzător unui test dacă pentru ambele cerinţe diferenţa absolută dintre rezultatul corect şi cel afişat este cel mult .
Exemplu
center.in
4 2
2
1 2 3 4
center.out
2.667
1.33333333
Explicație
Coordonatele celor puncte sunt: . Ponderile celor puncte sunt: . Distanţa mini-maximă este şi se obţine pentru intervalul (având lungimea ). Distanţele de la cele puncte la interval sunt: .