<?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=1246_-_Dispozitiv</id>
	<title>1246 - Dispozitiv - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1246_-_Dispozitiv"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1246_-_Dispozitiv&amp;action=history"/>
	<updated>2026-05-01T08:49:21Z</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=1246_-_Dispozitiv&amp;diff=9937&amp;oldid=prev</id>
		<title>RebecaBud: Pagină nouă: == Enunt == Specificul insulelor din arhipelagul Maldive (Oceanul Indian) este faptul că toate cele N insule ale sale au forma unui triunghi. Localizarea acestor insule folosește coordonatele carteziene ale celor trei vârfuri.  Administrația acestor insule dorește să instaleze un dispozitiv de emisie-recepţie pe apă sau pe o insulă, într-un punct având coordonate numere naturale (xD, yD), ce transmite semnale numai pe direcții orizontale și verticale concomitent,...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1246_-_Dispozitiv&amp;diff=9937&amp;oldid=prev"/>
		<updated>2024-06-03T14:33:26Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Specificul insulelor din arhipelagul Maldive (Oceanul Indian) este faptul că toate cele N insule ale sale au forma unui triunghi. Localizarea acestor insule folosește coordonatele carteziene ale celor trei vârfuri.  Administrația acestor insule dorește să instaleze un dispozitiv de emisie-recepţie pe apă sau pe o insulă, într-un punct având coordonate numere naturale (xD, yD), ce transmite semnale numai pe direcții orizontale și verticale concomitent,...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Specificul insulelor din arhipelagul Maldive (Oceanul Indian) este faptul că toate cele N insule ale sale au forma unui triunghi. Localizarea acestor insule folosește coordonatele carteziene ale celor trei vârfuri.&lt;br /&gt;
&lt;br /&gt;
Administrația acestor insule dorește să instaleze un dispozitiv de emisie-recepţie pe apă sau pe o insulă, într-un punct având coordonate numere naturale (xD, yD), ce transmite semnale numai pe direcții orizontale și verticale concomitent, cu următoarele proprietăţi:&lt;br /&gt;
&lt;br /&gt;
* notând cu NRO numărul de insule la care ajunge semnalul pe orizontală și cu NRV numărul de insule la care ajunge semnalul pe verticală, suma NRO + NRV trebuie să fie maximă;&lt;br /&gt;
* dacă există mai multe puncte cu proprietatea anterioară, atunci se va alege punctul cel mai mic în ordine lexicografică.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se scrie un program care cunoscând numărul de insule N şi coordonatele carteziene ale vârfurilor acestora, determină coordonatele xD și yD cu proprietățile din enunţ.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare dispozitiv.in conține pe prima linie numărul N, cu semnificaţia de mai sus, iar pe următoarele N linii se află câte şase numere reprezentând coordonatele vârfurilor insulelor (x1 y1 x2 y2 x3 y3).&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire dispozitiv.out va conține pe prima linie coordonatele xD și yD cu proprietatea din enunţ, separate printr-un spațiu.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* propoziția va conține cel mult &amp;#039;&amp;#039;&amp;#039;255&amp;#039;&amp;#039;&amp;#039; de caractere;&lt;br /&gt;
* cuvintele conțin doar litere și/sau cifre și conțin cel mult &amp;#039;&amp;#039;&amp;#039;20&amp;#039;&amp;#039;&amp;#039; de caractere;&lt;br /&gt;
* dacă în propoziție există mai multe cuvinte palindrom de lungime maximă, se va afișa primul dintre ele;&lt;br /&gt;
* semnele de punctuație din propoziție pot fi &amp;#039;&amp;#039;&amp;#039;:;.,&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* nu se face distincție între literele mari și cele mici;&lt;br /&gt;
* pentru toate testele date există soluție&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; dispozitiv.in&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
0 7 4 7 1 10&lt;br /&gt;
5 1 6 1 6 2&lt;br /&gt;
2 3 2 4 4 4&lt;br /&gt;
2 0 1 2 4 2&lt;br /&gt;
6 7 7 7 6 10&lt;br /&gt;
5 0 7 0 7 1&lt;br /&gt;
&lt;br /&gt;
; dispozitiv.out&lt;br /&gt;
&lt;br /&gt;
2 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Codificăm insulele cu 1, 2, …, 6, iar insula i va avea coordonatele vârfurilor pe linia i + 1.&lt;br /&gt;
Paralelele la axa Ox și Oy prin punctul de coordonate (2, 1) intersectează un număr de NRO = 3 triunghiuri și anume: 4, 2, 6 pe orizontală şi intersectează un număr de NRV = 3 triunghiuri: 4, 3, 1 pe verticală. NRO + NRV este maxim.&lt;br /&gt;
Mai sunt și alte puncte cu aceeași proprietate, dar mai mari în ordine lexicografică, cum ar fi punctul de coordonate (6, 1).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    with open(file_name, &amp;#039;r&amp;#039;) as file:&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        triangles = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            coords = list(map(int, file.readline().strip().split()))&lt;br /&gt;
            triangles.append([(coords[i], coords[i+1]) for i in range(0, 6, 2)])&lt;br /&gt;
    return triangles&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, xD, yD):&lt;br /&gt;
    with open(file_name, &amp;#039;w&amp;#039;) as file:&lt;br /&gt;
        file.write(f&amp;quot;{xD} {yD}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def on_same_side(p1, p2, a, b):&lt;br /&gt;
    cp1 = (b[0] - a[0]) * (p1[1] - a[1]) - (b[1] - a[1]) * (p1[0] - a[0])&lt;br /&gt;
    cp2 = (b[0] - a[0]) * (p2[1] - a[1]) - (b[1] - a[1]) * (p2[0] - a[0])&lt;br /&gt;
    return cp1 * cp2 &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
def point_in_triangle(p, a, b, c):&lt;br /&gt;
    return (on_same_side(p, a, b, c) and&lt;br /&gt;
            on_same_side(p, b, a, c) and&lt;br /&gt;
            on_same_side(p, c, a, b))&lt;br /&gt;
&lt;br /&gt;
def calculate_intersections(triangles, x_set, y_set):&lt;br /&gt;
    max_sum = 0&lt;br /&gt;
    best_point = (float(&amp;#039;inf&amp;#039;), float(&amp;#039;inf&amp;#039;))&lt;br /&gt;
    &lt;br /&gt;
    for x in x_set:&lt;br /&gt;
        for y in y_set:&lt;br /&gt;
            NRO = sum(1 for t in triangles if any((x == vx for vx, vy in t)))&lt;br /&gt;
            NRV = sum(1 for t in triangles if any((y == vy for vx, vy in t)))&lt;br /&gt;
            current_sum = NRO + NRV&lt;br /&gt;
            if current_sum &amp;gt; max_sum or (current_sum == max_sum and (x &amp;lt; best_point[0] or (x == best_point[0] and y &amp;lt; best_point[1]))):&lt;br /&gt;
                max_sum = current_sum&lt;br /&gt;
                best_point = (x, y)&lt;br /&gt;
    &lt;br /&gt;
    return best_point&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &amp;quot;dispozitiv.in&amp;quot;&lt;br /&gt;
    output_file = &amp;quot;dispozitiv.out&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    triangles = read_input(input_file)&lt;br /&gt;
    &lt;br /&gt;
    x_set = set()&lt;br /&gt;
    y_set = set()&lt;br /&gt;
    &lt;br /&gt;
    for t in triangles:&lt;br /&gt;
        for x, y in t:&lt;br /&gt;
            x_set.add(x)&lt;br /&gt;
            y_set.add(y)&lt;br /&gt;
    &lt;br /&gt;
    xD, yD = calculate_intersections(triangles, x_set, y_set)&lt;br /&gt;
    &lt;br /&gt;
    write_output(output_file, xD, yD)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RebecaBud</name></author>
	</entry>
</feed>