<?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=4134_-_Raza_1</id>
	<title>4134 - Raza 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4134_-_Raza_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4134_-_Raza_1&amp;action=history"/>
	<updated>2026-05-01T03:42:43Z</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=4134_-_Raza_1&amp;diff=10195&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: Pe planeta Quadratia, locuitorii folosesc forme pătrate în tot ceea ce construiesc. Ei au trimis pe solul planetei &lt;code&gt;N&lt;/code&gt; mașini speciale de apărare, numite &#039;&#039;&#039;rovere&#039;&#039;&#039;, care se deplasează pe traiectorii ce descriu pătrate. Harta  planetei poate fi privită ca un tablou bidimensional cu număr infinit de linii și coloane, numerotarea acestora începând cu &lt;code&gt;1&lt;/code&gt;. Fiecare element al acestui tablou se identifică prin numărul liniei, respectiv numărul...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4134_-_Raza_1&amp;diff=10195&amp;oldid=prev"/>
		<updated>2024-07-30T14:30:12Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Pe planeta Quadratia, locuitorii folosesc forme pătrate în tot ceea ce construiesc. Ei au trimis pe solul planetei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; mașini speciale de apărare, numite &amp;#039;&amp;#039;&amp;#039;rovere&amp;#039;&amp;#039;&amp;#039;, care se deplasează pe traiectorii ce descriu pătrate. Harta  planetei poate fi privită ca un tablou bidimensional cu număr infinit de linii și coloane, numerotarea acestora începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Fiecare element al acestui tablou se identifică prin numărul liniei, respectiv numărul...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Pe planeta Quadratia, locuitorii folosesc forme pătrate în tot ceea ce construiesc. Ei au trimis pe solul planetei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; mașini speciale de apărare, numite &amp;#039;&amp;#039;&amp;#039;rovere&amp;#039;&amp;#039;&amp;#039;, care se deplasează pe traiectorii ce descriu pătrate. Harta  planetei poate fi privită ca un tablou bidimensional cu număr infinit de linii și coloane, numerotarea acestora începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Fiecare element al acestui tablou se identifică prin numărul liniei, respectiv numărul coloanei pe care se găsește.&lt;br /&gt;
&lt;br /&gt;
Fiecare rover este descris prin &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere naturale nenule &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, reprezentând poziția (linia &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; și coloana &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;) elementului din colțul din stânga-sus al pătratului ce descrie traiectoria, respectiv lungimea &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; a laturii acestuia. Toate roverele pornesc inițial din elementul din colțul stânga-sus al pătratului ce descrie traiectoria, pe care o parcurg în sensul acelor de ceasornic, traversând câte un element pe secundă. Ele sunt programate să parcurgă această traiectorie fără a se opri. Este posibil ca mai multe rovere să se afle, la un moment dat, la aceeași poziție de pe hartă.&lt;br /&gt;
&lt;br /&gt;
Rectilinienii sunt singurii dușmani ai quadratienilor, ei deosebindu-se de aceștia prin folosirea consecventă a liniilor drepte în tot ceea ce construiesc. Rectilinienii au construit o armă laser de mare putere, pe care vor să o folosească la distrugerea roverelor quadratiene. Arma a fost adusă în poziția &amp;lt;code&amp;gt;(1,1)&amp;lt;/code&amp;gt; de pe harta planetei, adică elementul de pe prima linie și prima coloană.&lt;br /&gt;
&lt;br /&gt;
Arma poate emite &amp;#039;&amp;#039;&amp;#039;o singură&amp;#039;&amp;#039;&amp;#039; rază distructivă, timp de o secundă, dezafectând în acest timp toate roverele aflate în secunda respectivă pe diagonala principală a tabloului care descrie harta planetei. Arma nu poate fi detectată în primele &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; secunde. Traiectoria roverelor poate trece prin poziția în care a fost amplasată arma, fără a o putea detecta în primele &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; secunde.&lt;br /&gt;
&lt;br /&gt;
În imagine avem două rovere, acestea fiind identificate prin tripletele de numere &amp;lt;code&amp;gt;4, 2, 6&amp;lt;/code&amp;gt;, respectiv &amp;lt;code&amp;gt;6, 9, 4&amp;lt;/code&amp;gt;.  Traiectoria primului rover începe din poziția &amp;lt;code&amp;gt;(4, 2)&amp;lt;/code&amp;gt; și are latura &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;. Numerele de pe traiectorie reprezintă secunda la care se parcurge respectivul element al tabloului. Roverul va ajunge din nou în poziția inițială la secundele &amp;lt;code&amp;gt;21, 41, 61, ...&amp;lt;/code&amp;gt; Primul rover intersectează, la prima sa trecere, diagonala principală în două puncte: &amp;lt;code&amp;gt;(4, 4)&amp;lt;/code&amp;gt; la secunda &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;(7, 7)&amp;lt;/code&amp;gt; la secunda &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;. Al doilea rover intersectează diagonala principală într-un singur punct, &amp;lt;code&amp;gt;(9, 9)&amp;lt;/code&amp;gt; la secundele &amp;lt;code&amp;gt;10, 22, 34, ...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care să rezolve următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
* Determină numărul roverelor a căror traiectorie se intersectează cu diagonala principală a tabloului ce descrie harta.&lt;br /&gt;
* Determină numărul maxim de rovere, care pot fi distruse simultan, într-o singură secundă, înainte de trecerea celor &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; secunde, precum și secunda minimă în care se poate realiza acest lucru.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Datele de intrare se citesc din fișierul &amp;lt;code&amp;gt;raza.in&amp;lt;/code&amp;gt;, care are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
* pe prima linie se află numărul natural &amp;lt;code&amp;gt;T ∈ {1, 2}&amp;lt;/code&amp;gt;, semnificând numărul cerinței de rezolvat.&lt;br /&gt;
* pe a doua linie se află numerele naturale nenule &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, separate printr-un spațiu, reprezentând numărul roverelor, respectiv numărul de secunde în care arma nu este detectată.&lt;br /&gt;
* pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii se află câte 3 numere naturale nenule, &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, separate prin câte un spațiu, reprezentând coordonatele poziției inițiale, respectiv lungimea laturii traiectoriei fiecărui rover.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Datele de ieșire se vor afișa în fișierul &amp;lt;code&amp;gt;raza.out&amp;lt;/code&amp;gt;, care are următoarea structură în funcție de cerință:&lt;br /&gt;
&lt;br /&gt;
* dacă &amp;lt;code&amp;gt;T = 1&amp;lt;/code&amp;gt;, pe prima linie se va afișa numărul roverelor a căror traiectorie se intersectează cu diagonala principală;&lt;br /&gt;
* dacă &amp;lt;code&amp;gt;T = 2&amp;lt;/code&amp;gt;, pe prima linie se vor afișa două numere naturale, separate printr-un spațiu, reprezentând numărul maxim de rovere dezactivate și secunda minimă în care se poate realiza acest lucru.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ S ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ L, C ≤ 50.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ R ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Numărul maxim de rovere care se intersectează cu raza armei ≤ 1000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru 28 de puncte, &amp;lt;code&amp;gt;T = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru 72 de puncte, &amp;lt;code&amp;gt;T = 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;raza.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 2 100&lt;br /&gt;
 4 2 6&lt;br /&gt;
 6 9 4&lt;br /&gt;
&amp;lt;code&amp;gt;raza.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Cerința este 1. Exemplul reprezintă desenul din enunț.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
def calculate_trajectory(L, C, R):&lt;br /&gt;
    trajectory = []&lt;br /&gt;
    for t in range(4 * R):&lt;br /&gt;
        if t &amp;lt; R:&lt;br /&gt;
            trajectory.append((L, C + t))&lt;br /&gt;
        elif t &amp;lt; 2 * R:&lt;br /&gt;
            trajectory.append((L + t - R, C + R - 1))&lt;br /&gt;
        elif t &amp;lt; 3 * R:&lt;br /&gt;
            trajectory.append((L + R - 1, C + R - 1 - (t - 2 * R)))&lt;br /&gt;
        else:&lt;br /&gt;
            trajectory.append((L + R - 1 - (t - 3 * R), C))&lt;br /&gt;
    return trajectory&lt;br /&gt;
&lt;br /&gt;
def solve(N, rovers, S):&lt;br /&gt;
    diagonal_intersections = defaultdict(list)&lt;br /&gt;
    &lt;br /&gt;
    for rover in rovers:&lt;br /&gt;
        L, C, R = rover&lt;br /&gt;
        trajectory = calculate_trajectory(L, C, R)&lt;br /&gt;
        for i, (x, y) in enumerate(trajectory):&lt;br /&gt;
            if x == y:&lt;br /&gt;
                t = i + 1&lt;br /&gt;
                diagonal_intersections[t].append((L, C, R))&lt;br /&gt;
    &lt;br /&gt;
    count_per_second = defaultdict(int)&lt;br /&gt;
    for t, rovers_at_t in diagonal_intersections.items():&lt;br /&gt;
        if t &amp;lt;= S:&lt;br /&gt;
            count_per_second[t] += len(rovers_at_t)&lt;br /&gt;
    &lt;br /&gt;
    if not count_per_second:&lt;br /&gt;
        return 0, None, None&lt;br /&gt;
    &lt;br /&gt;
    max_destructions = max(count_per_second.values())&lt;br /&gt;
    min_time = min(t for t in count_per_second if count_per_second[t] == max_destructions)&lt;br /&gt;
    &lt;br /&gt;
    return len(diagonal_intersections), max_destructions, min_time&lt;br /&gt;
&lt;br /&gt;
# Example usage&lt;br /&gt;
N = 2&lt;br /&gt;
rovers = [(4, 2, 6), (6, 9, 4)]&lt;br /&gt;
S = 10&lt;br /&gt;
print(solve(N, rovers, S))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RaulOtet</name></author>
	</entry>
</feed>