<?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=0936_-_Infasuratoare_Convexa</id>
	<title>0936 - Infasuratoare Convexa - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0936_-_Infasuratoare_Convexa"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0936_-_Infasuratoare_Convexa&amp;action=history"/>
	<updated>2026-05-01T11:23:09Z</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=0936_-_Infasuratoare_Convexa&amp;diff=9944&amp;oldid=prev</id>
		<title>RebecaBud: Pagină nouă: == Cerinţa == Se dau puncte distincte în plan. Să se determine un poligon de arie maximă care are vârfuri dintre punctele date. == Date de intrare == Fișierul de intrare infasuratoareconvexa.in conține pe prima linie un număr &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de puncte. Pe următoarele n linii se găsesc câte două numere separate printr-un spațiu, reprezentând abscisa respectiv ordonata câte unui punct. == Date de ieșire == Fișierul de ieșire infasuratoareconvex...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0936_-_Infasuratoare_Convexa&amp;diff=9944&amp;oldid=prev"/>
		<updated>2024-06-03T14:46:28Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dau puncte distincte în plan. Să se determine un poligon de arie maximă care are vârfuri dintre punctele date. == Date de intrare == Fișierul de intrare infasuratoareconvexa.in conține pe prima linie un număr &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de puncte. Pe următoarele n linii se găsesc câte două numere separate printr-un spațiu, reprezentând abscisa respectiv ordonata câte unui punct. == Date de ieșire == Fișierul de ieșire infasuratoareconvex...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau puncte distincte în plan. Să se determine un poligon de arie maximă care are vârfuri dintre punctele date.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare infasuratoareconvexa.in conține pe prima linie un număr &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de puncte. Pe următoarele n linii se găsesc câte două numere separate printr-un spațiu, reprezentând abscisa respectiv ordonata câte unui punct.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire infasuratoareconvexa.out va conține pe prima linie un număr &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale poligonului determinat. Pe următoarele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; linii se găsesc câte două numere separate printr-un spațiu, reprezentând respectiv abscisa și ordonata câte unui punct.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Numerele din fișierul de intrare sunt întregi cuprinse între -1001 și 1001.&lt;br /&gt;
* Primul punct care se va afișa va fi cel cu ordonata minimă, iar în caz de egalitate cel cu abscisa minimă.&lt;br /&gt;
* Punctele se vor afișa în sens trigonometric al parcurgerii lor pe înfășurătoare.&lt;br /&gt;
* Se cere soluția cu număr maxim de puncte (pot fi puncte coliniare pe înfășurătoare).&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; infasuratoareconvexa.in&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
1 1&lt;br /&gt;
0 0&lt;br /&gt;
0 2&lt;br /&gt;
2 2&lt;br /&gt;
2 0 &lt;br /&gt;
; infasuratoareconvexa.out&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
0 0&lt;br /&gt;
2 0&lt;br /&gt;
2 2&lt;br /&gt;
0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&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;
import math&lt;br /&gt;
&lt;br /&gt;
def orientation(p, q, r):&lt;br /&gt;
    val = (q[1] - p[1]) * (r[0] - q[0]) - (q[0] - p[0]) * (r[1] - q[1])&lt;br /&gt;
    if val == 0:&lt;br /&gt;
        return 0  &lt;br /&gt;
    return 1 if val &amp;gt; 0 else 2  &lt;br /&gt;
&lt;br /&gt;
def convex_hull(points):&lt;br /&gt;
    n = len(points)&lt;br /&gt;
    if n &amp;lt; 3:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    hull = []&lt;br /&gt;
&lt;br /&gt;
    l = 0&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        if points[i][1] &amp;lt; points[l][1] or (points[i][1] == points[l][1] and points[i][0] &amp;lt; points[l][0]):&lt;br /&gt;
            l = i&lt;br /&gt;
&lt;br /&gt;
    p = l&lt;br /&gt;
    while True:&lt;br /&gt;
        hull.append(points[p])&lt;br /&gt;
        q = (p + 1) % n&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            if orientation(points[p], points[i], points[q]) == 2:&lt;br /&gt;
                q = i&lt;br /&gt;
        p = q&lt;br /&gt;
        if p == l:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    return hull&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;infasuratoareconvexa.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    n = int(fin.readline().strip())&lt;br /&gt;
    points = [list(map(int, fin.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
convex_points = convex_hull(points)&lt;br /&gt;
&lt;br /&gt;
convex_points.sort(key=lambda x: (x[1], x[0]))&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;infasuratoareconvexa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(len(convex_points)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    for point in convex_points:&lt;br /&gt;
        fout.write(&amp;quot; &amp;quot;.join(map(str, point)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RebecaBud</name></author>
	</entry>
</feed>