<?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=1142_-_Lasere</id>
	<title>1142 - Lasere - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1142_-_Lasere"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;action=history"/>
	<updated>2026-05-01T04:47:07Z</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=1142_-_Lasere&amp;diff=8979&amp;oldid=prev</id>
		<title>Andrada378 at 15:22, 4 January 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;diff=8979&amp;oldid=prev"/>
		<updated>2024-01-04T15:22:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;amp;diff=8979&amp;amp;oldid=8394&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;diff=8394&amp;oldid=prev</id>
		<title>Andrada378: Pagină nouă: Se consideră un teren reprezentat printr-o matrice cu n linii şi n coloane având elemente numere naturale. În fiecare element al matricei este memorată înălţimea zonei de teren corespunzătoare ca poziţie elementului respectiv. Pe acest teren sunt amplasate m lasere, în poziţii cunoscute. Un laser este îndreptat spre unul dintre cele 4 puncte cardinale, codificate prin numere astfel: Nord prin valoarea 1, Est prin valoarea 2, Sud prin valoarea 3 şi respectiv Vest...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;diff=8394&amp;oldid=prev"/>
		<updated>2023-12-26T17:33:20Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Se consideră un teren reprezentat printr-o matrice cu n linii şi n coloane având elemente numere naturale. În fiecare element al matricei este memorată înălţimea zonei de teren corespunzătoare ca poziţie elementului respectiv. Pe acest teren sunt amplasate m lasere, în poziţii cunoscute. Un laser este îndreptat spre unul dintre cele 4 puncte cardinale, codificate prin numere astfel: Nord prin valoarea 1, Est prin valoarea 2, Sud prin valoarea 3 şi respectiv Vest...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Se consideră un teren reprezentat printr-o matrice cu n linii şi n coloane având elemente numere naturale. În fiecare element al matricei este memorată înălţimea zonei de teren corespunzătoare ca poziţie elementului respectiv. Pe acest teren sunt amplasate m lasere, în poziţii cunoscute. Un laser este îndreptat spre unul dintre cele 4 puncte cardinale, codificate prin numere astfel: Nord prin valoarea 1, Est prin valoarea 2, Sud prin valoarea 3 şi respectiv Vest prin valoarea 4. Fiecare laser va executa o singură tragere şi ca urmare va scădea cu 1 valorile tuturor elementelor din matrice din direcţia sa de tragere, exceptând poziţia laserului respectiv.&lt;br /&gt;
&lt;br /&gt;
După efectuarea tuturor tragerilor, se caută poziţiile tuturor gropilor şi ale tranşeelor.&lt;br /&gt;
&lt;br /&gt;
Numim groapă un element din matrice pentru care toate cele 8 elemente învecinate pe linie, coloană sau diagonale au valori mai mari sau egale decât el.&lt;br /&gt;
&lt;br /&gt;
Numim tranşee o secvenţă maximală formată din două sau mai multe gropi situate pe aceeaşi linie, pe coloane consecutive. Secvenţa se numeşte maximală dacă nu mai poate fi prelungită la niciunul dintre capete.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;u&amp;gt;&amp;lt;big&amp;gt;Cerinţe&amp;lt;/big&amp;gt;&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Cunoscând configuraţia terenului şi amplasarea laserelor, să se rezolve una dintre următoarele două cerinţe:&lt;br /&gt;
&lt;br /&gt;
1. să se determine numărul de gropi din teren, după executarea tragerilor;&lt;br /&gt;
&lt;br /&gt;
2. să se determine numărul de tranşee existente, după executarea tragerilor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Date de intrare&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare lasere.in conține pe prima linie un număr natural c care reprezintă cerinţa ce urmează să fie rezolvată (1 sau 2). Pe a doua linie se află două numere naturale n şi m, reprezentând numărul de linii şi de coloane ale matricei, respectiv numărul de lasere. Pe următoarele n linii se află câte n numere naturale, reprezentând elementele matricei. Pe următoarele m linii sunt descrise cele m lasere, câte un laser pe o linie. Pe o linie care descrie un laser se află 3 numere naturale i j d, cu semnificaţia că se află un laser pe linia i şi coloana j (1≤i,j≤n), care trage în direcţia d (1≤d≤4). Valorile situate pe aceeaşi linie sunt separate prin spaţiu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Date de ieșire&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire lasere.out va conține pe prima linie un singur număr natural. Acest număr reprezintă numărul de gropi (dacă c=1) sau numărul de tranşee (dacă c=2).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;lt;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;Restricții și precizări&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
4 ≤ n ≤ 200&lt;br /&gt;
&lt;br /&gt;
1 ≤ m ≤ 200&lt;br /&gt;
&lt;br /&gt;
Numerotarea liniilor şi a coloanelor este de la 1 la n.&lt;br /&gt;
&lt;br /&gt;
Elementele matricei din fişierul de intrare sunt numere naturale de maxim 4 cifre.&lt;br /&gt;
&lt;br /&gt;
Poziţiile laserelor sunt distincte.&lt;br /&gt;
&lt;br /&gt;
Pentru teste valorând 30% din punctaj cerinţa este 1.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;u&amp;gt;Exemplul 1&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
lasere.in&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
5 3&lt;br /&gt;
&lt;br /&gt;
1 1 3 4 5&lt;br /&gt;
&lt;br /&gt;
8 7 6 5 4&lt;br /&gt;
&lt;br /&gt;
9 3 5 6 7&lt;br /&gt;
&lt;br /&gt;
1 1 1 9 8&lt;br /&gt;
&lt;br /&gt;
1 1 1 5 6&lt;br /&gt;
&lt;br /&gt;
2 3 3&lt;br /&gt;
&lt;br /&gt;
4 4 4&lt;br /&gt;
&lt;br /&gt;
1 4 2&lt;br /&gt;
&lt;br /&gt;
lasere.out&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;u&amp;gt;Exemplul 2&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
lasere.in&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
5 3&lt;br /&gt;
&lt;br /&gt;
1 1 3 4 5&lt;br /&gt;
&lt;br /&gt;
8 7 6 5 4&lt;br /&gt;
&lt;br /&gt;
9 3 5 6 7&lt;br /&gt;
&lt;br /&gt;
1 1 1 9 8&lt;br /&gt;
&lt;br /&gt;
1 1 1 5 6&lt;br /&gt;
&lt;br /&gt;
2 3 3&lt;br /&gt;
&lt;br /&gt;
4 4 4&lt;br /&gt;
&lt;br /&gt;
1 4 2&lt;br /&gt;
&lt;br /&gt;
lasere.out&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;lt;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;Rezolvare&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
def rezolva_cerinta(c, n, m, teren, lasere):&lt;br /&gt;
&lt;br /&gt;
    def executa_trageri(laser, teren):&lt;br /&gt;
&lt;br /&gt;
        i, j, d = laser&lt;br /&gt;
&lt;br /&gt;
        i -= 1&lt;br /&gt;
&lt;br /&gt;
        j -= 1&lt;br /&gt;
&lt;br /&gt;
        if d == 1:  # Tragere la Nord&lt;br /&gt;
&lt;br /&gt;
            for x in range(i - 1, -1, -1):&lt;br /&gt;
&lt;br /&gt;
                if x &amp;gt;= 0:&lt;br /&gt;
&lt;br /&gt;
                    teren[x][j] -= 1&lt;br /&gt;
&lt;br /&gt;
        elif d == 2:  # Tragere la Est&lt;br /&gt;
&lt;br /&gt;
            for y in range(j + 1, n):&lt;br /&gt;
&lt;br /&gt;
                if y &amp;lt; n:&lt;br /&gt;
&lt;br /&gt;
                    teren[i][y] -= 1&lt;br /&gt;
&lt;br /&gt;
        elif d == 3:  # Tragere la Sud&lt;br /&gt;
&lt;br /&gt;
            for x in range(i + 1, n):&lt;br /&gt;
&lt;br /&gt;
                if x &amp;lt; n:&lt;br /&gt;
&lt;br /&gt;
                    teren[x][j] -= 1&lt;br /&gt;
&lt;br /&gt;
        elif d == 4:  # Tragere la Vest&lt;br /&gt;
&lt;br /&gt;
            for y in range(j - 1, -1, -1):&lt;br /&gt;
&lt;br /&gt;
                if y &amp;gt;= 0:&lt;br /&gt;
&lt;br /&gt;
                    teren[i][y] -= 1&lt;br /&gt;
&lt;br /&gt;
    def este_groapa(x, y, teren):&lt;br /&gt;
&lt;br /&gt;
        for i in range(max(0, x - 1), min(n, x + 2)):&lt;br /&gt;
&lt;br /&gt;
            for j in range(max(0, y - 1), min(n, y + 2)):&lt;br /&gt;
&lt;br /&gt;
                if i &amp;lt; n and j &amp;lt; n and teren[i][j] &amp;lt; teren[x][y]:&lt;br /&gt;
&lt;br /&gt;
                    return False&lt;br /&gt;
&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
    def identifica_groape_si_transee(teren):&lt;br /&gt;
&lt;br /&gt;
        gropi = 0&lt;br /&gt;
&lt;br /&gt;
        transee = 0&lt;br /&gt;
&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
&lt;br /&gt;
            for j in range(n):&lt;br /&gt;
&lt;br /&gt;
                if este_groapa(i, j, teren):&lt;br /&gt;
&lt;br /&gt;
                    gropi += 1&lt;br /&gt;
&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
&lt;br /&gt;
            j = 0&lt;br /&gt;
&lt;br /&gt;
            while j &amp;lt; n:&lt;br /&gt;
&lt;br /&gt;
                if este_groapa(i, j, teren):&lt;br /&gt;
&lt;br /&gt;
                    transee += 1&lt;br /&gt;
&lt;br /&gt;
                    while j &amp;lt; n and este_groapa(i, j, teren):&lt;br /&gt;
&lt;br /&gt;
                        j += 1&lt;br /&gt;
&lt;br /&gt;
                else:&lt;br /&gt;
&lt;br /&gt;
                    j += 1&lt;br /&gt;
&lt;br /&gt;
        return gropi if c == 1 else transee&lt;br /&gt;
&lt;br /&gt;
    for laser in lasere:&lt;br /&gt;
&lt;br /&gt;
        executa_trageri(laser, teren)&lt;br /&gt;
&lt;br /&gt;
    rezultat = identifica_groape_si_transee(teren)&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Citire date de intrare&lt;br /&gt;
&lt;br /&gt;
with open(&amp;#039;laserein.txt&amp;#039;, &amp;#039;r&amp;#039;) as f:&lt;br /&gt;
&lt;br /&gt;
    c = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    n, m = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
    teren = [list(map(int, f.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    lasere = [list(map(int, f.readline().split())) for _ in range(m)]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Calculare rezultat&lt;br /&gt;
&lt;br /&gt;
rezultat = rezolva_cerinta(c, n, m, teren, lasere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Scriere date de iesire&lt;br /&gt;
&lt;br /&gt;
with open(&amp;#039;lasereout.txt&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
&lt;br /&gt;
    f.write(str(rezultat) + &amp;#039;\n&amp;#039;)&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>