<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0699_-_Intervale3</id>
	<title>0699 - Intervale3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0699_-_Intervale3"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0699_-_Intervale3&amp;action=history"/>
	<updated>2026-05-01T12:08:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0699_-_Intervale3&amp;diff=8732&amp;oldid=prev</id>
		<title>Ramona Dragoș: Pagină nouă: == Enunt == Se consideră N intervale [Ai,Bi], 1 ≤ i ≤ N disjuncte.  Tuturor intervalelor li se aplică o operație de extindere la ambele capete cu o valoare naturală x, astfel încât după extindere cu valoarea x, intervalul [Ai,Bi] va deveni intervalul [Ai-x,Bi+x], 1 ≤ i ≤ N.  După extindere, spunem că intervalele [Ai,Bi] și [Aj,Bj] aparțin aceluiași grup de intervale dacă ele se intersectează sau dacă există un interval [Ak,Bk] astfel încât [Ai,Bi] se...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0699_-_Intervale3&amp;diff=8732&amp;oldid=prev"/>
		<updated>2023-12-31T14:34:55Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Se consideră N intervale [Ai,Bi], 1 ≤ i ≤ N disjuncte.  Tuturor intervalelor li se aplică o operație de extindere la ambele capete cu o valoare naturală x, astfel încât după extindere cu valoarea x, intervalul [Ai,Bi] va deveni intervalul [Ai-x,Bi+x], 1 ≤ i ≤ N.  După extindere, spunem că intervalele [Ai,Bi] și [Aj,Bj] aparțin aceluiași grup de intervale dacă ele se intersectează sau dacă există un interval [Ak,Bk] astfel încât [Ai,Bi] se...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Se consideră N intervale [Ai,Bi], 1 ≤ i ≤ N disjuncte.&lt;br /&gt;
&lt;br /&gt;
Tuturor intervalelor li se aplică o operație de extindere la ambele capete cu o valoare naturală x, astfel încât după extindere cu valoarea x, intervalul [Ai,Bi] va deveni intervalul [Ai-x,Bi+x], 1 ≤ i ≤ N.&lt;br /&gt;
&lt;br /&gt;
După extindere, spunem că intervalele [Ai,Bi] și [Aj,Bj] aparțin aceluiași grup de intervale dacă ele se intersectează sau dacă există un interval [Ak,Bk] astfel încât [Ai,Bi] se intersectează cu [Ak,Bk] iar intervalele [Ak,Bk], [Aj,Bj] aparțin aceluiași grup de intervale.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine valoarea minimă x cu care vor trebui să fie extinse toate intervalele astfel încât să se formeze un grup cu cel puțin P intervale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare intervale3in.txt conține pe prima linie numerele naturale N și P cu semnificația din enunț. Pe următoarele N linii sunt descrise cele N intervale, câte un interval pe linie. Pentru fiecare interval i sunt specificate capetele sale Ai şi Bi.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire intervale3out.txt va conţine pe prima linie numărul natural x ce reprezintă valoarea minimă cu care vor trebui extinse intervalele astfel încât să se obțină cel puțin un grup format din cel minimum P intervale.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 &amp;amp;les; N &amp;amp;les; 100 000&lt;br /&gt;
*-1 400 000 000 &amp;amp;les; Ai &amp;lt; Bi &amp;amp;les; 1 400 000 000&lt;br /&gt;
*2 &amp;amp;les; P &amp;amp;les; N&lt;br /&gt;
*Două intervale se intersectează dacă au cel puţin un punct comun&lt;br /&gt;
*Pentru 30% dintre teste N &amp;amp;les; 10 000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;intervale3in.txt&lt;br /&gt;
:7 3&lt;br /&gt;
:8 9&lt;br /&gt;
:21 25&lt;br /&gt;
:14 17&lt;br /&gt;
:1 4&lt;br /&gt;
:28 32&lt;br /&gt;
:35 42&lt;br /&gt;
:100 200&lt;br /&gt;
;intervale3out.txt&lt;br /&gt;
:2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;intervale3in.txt&lt;br /&gt;
:-1 0 0&lt;br /&gt;
;intervale3out.txt&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0699 - Intervale3&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &amp;#039;r&amp;#039;) as file:&lt;br /&gt;
            N, P = map(int, file.readline().split())&lt;br /&gt;
            intervals = [list(map(int, file.readline().split())) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
            return N, P, intervals&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerintele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, result):&lt;br /&gt;
    with open(file_name, &amp;#039;w&amp;#039;) as file:&lt;br /&gt;
        if result is not None:&lt;br /&gt;
            file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def min_extension(N, P, intervals):&lt;br /&gt;
    intervals.sort()&lt;br /&gt;
&lt;br /&gt;
    left, right = 0, max(intervals[i][1] - intervals[i][0] for i in range(N))&lt;br /&gt;
    result = 2&lt;br /&gt;
&lt;br /&gt;
    while left &amp;lt;= right:&lt;br /&gt;
        mid = (left + right) // 2&lt;br /&gt;
        groups = 1&lt;br /&gt;
        end = intervals[0][1]&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, N):&lt;br /&gt;
            if intervals[i][0] - mid &amp;lt;= end:&lt;br /&gt;
                end = max(end, intervals[i][1])&lt;br /&gt;
            else:&lt;br /&gt;
                groups += 1&lt;br /&gt;
                end = intervals[i][1]&lt;br /&gt;
&lt;br /&gt;
        if groups &amp;gt;= P:&lt;br /&gt;
            result = min(result, mid)&lt;br /&gt;
            right = mid - 1&lt;br /&gt;
        else:&lt;br /&gt;
            left = mid + 1&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def main(input_file, output_file):&lt;br /&gt;
    result = read_input(input_file)&lt;br /&gt;
    if result is not None:&lt;br /&gt;
        N, P, intervals = result&lt;br /&gt;
        result = min_extension(N, P, intervals)&lt;br /&gt;
        write_output(output_file, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main(&amp;quot;intervale3in.txt&amp;quot;, &amp;quot;intervale3out.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
</feed>