Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2383 - Plaja1
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Primăria orașului Constanța reamenajează plaja din stațiunea Mamaia. Aceasta este reprezentată ca o zonă dreptunghiulară cu lățimea de <code>a</code> unități și lungimea de <code>b</code> unități. Pe plajă sunt trasate linii paralele cu laturile dreptunghiului astfel încât să formeze pătrate cu latura de o unitate, numite zone. Pe plajă se vor pune obiecte: umbrele și prosoape. Se consideră că dacă un obiect intră în interiorul unei zone, o ocupă în întregime. Se poziționează <code>u</code> umbrele de soare. Într-o zonă se poate așeza cel mult o umbrelă. <code>N</code> turişti vin şi îşi aşează prosoapele pe plajă. Un prosop are formă dreptunghiulară şi va fi aşezat paralel cu laturile dreptunghiului. Turiştii îşi pot aşeza prosoapele pe zone libere sau peste prosoape deja aşezate. Un turist nu îşi poate aşeza însă prosopul pe plajă dacă suprafaţa acoperită de acesta include cel puţin o zonă în care se află o umbrelă. <code>M</code> localnici au suprafeţe favorite pentru aşezarea prosoapelor. O suprafaţă favorită are forma unui dreptunghi cu laturile paralele cu laturile dreptunghiului care marchează plaja. După ce turiştii termină aşezarea prosoapelor, localnicii verifică dacă zonele din suprafaţa favorită sunt libere (neacoperite de prosoape aşezate de turişti sau de umbrele). = Cerința = Scrieţi un program care să determine numărul de turişti care au reuşit să îşi aşeze prosoapele pe plajă, precum și numărul de localnici ale căror zone favorite sunt libere. = Date de intrare = Fișierul de intrare <code>plaja1.in</code> conține pe prima linie trei numere naturale, separate prin câte un spațiu, <code>a</code>, <code>b</code> şi <code>u</code>, având semnificația din enunț. Fiecare din următoarele <code>u</code> linii conține o pereche de numere naturale <code>x y</code>, reprezentând o zonă în care se găsește o umbrelă. Următoarea linie din fișier conține un număr natural <code>N</code>, reprezentând numărul de turiști. Următoarele <code>N</code> linii descriu prosoapele turiștilor. Fiecare linie conține patru numere naturale <code>x1 y1 x2 y2</code>, ce reprezintă colțurile unui prosop. Linia următoare conține o singură valoare, <code>M</code>, reprezentând numărul de localnici. Pe următoarele <code>M</code> linii se află câte patru numere, separate prin câte un spațiu, <code>x1’ y1’ x2’ y2’</code>, ce reprezintă colțurile unei suprafețe favorite. = Date de ieșire = Fișierul de ieșire <code>plaja1.out</code> conţine pe prima linie două numere naturale separate printr-un spaţiu. Primul număr reprezintă numărul de turişti care şi-au aşezat prosoapele pe plajă, iar cel de-al doilea număr reprezintă numărul de localnici ale căror zone favorite sunt libere. = Restricții și precizări = * Colţul din stânga sus al zonei dreptunghiulare are coordonatele <code>(1,1)</code> * <code>3 ≤ a, b ≤ 2.000</code> * <code>0 ≤ u ≤ 100</code> * <code>3 ≤ m, n ≤ 100.000</code> * Un prosop descris de <code>(x1, y1, x2, y2)</code> va avea <code>1 ≤ x1 ≤ x2 ≤ a</code> şi <code>1 ≤ y1 ≤ y2 ≤ b</code> * O suprafaţă favorită descrisă de <code>(x1’, y1’, x2’, y2’)</code> va avea <code>1 ≤ x1’ ≤ x2’ ≤ a</code> şi <code>1 ≤ y1’ ≤ y2’ ≤ b</code> = Exemplu: = <code>plaja1.in</code> 12 13 1 6 11 4 3 4 7 7 5 6 8 8 9 2 10 3 5 10 8 12 3 1 8 3 13 10 3 12 4 2 10 5 12 <code>plaja1.out</code> 3 2 == Încărcare soluție == === Lipește codul aici === <syntaxhighlight lang="python" line="1"> import sys NMax = 2004 M, N, A, B, U = 0, 0, 0, 0, 0 X = [0] * 128 Y = [0] * 128 S = [[0 for _ in range(NMax)] for _ in range(NMax)] Res = 0 def main(): global M, N, A, B, U, X, Y, S, Res i, j, x1, y1, x2, y2 = 0, 0, 0, 0, 0, 0 ok = False sys.stdin = open('plaja1.intxt', 'r') sys.stdout = open('plaja1.outtxt', 'w') A, B, U = map(int, input().split()) for i in range(1, U + 1): X[i], Y[i] = map(int, input().split()) N = int(input()) for i in range(1, N + 1): x1, y1, x2, y2 = map(int, input().split()) for j in range(1, U + 1): if x1 <= X[j] <= x2 and y1 <= Y[j] <= y2: ok = False break ok = True if not ok: continue Res += 1 S[x1][y1] += 1 S[x2 + 1][y2 + 1] += 1 S[x1][y2 + 1] -= 1 S[x2 + 1][y1] -= 1 print(Res) for i in range(1, A + 1): for j in range(1, B + 1): S[i][j] += S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] for i in range(1, U + 1): S[X[i]][Y[i]] = 1 for i in range(1, A + 1): for j in range(1, B + 1): S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + (S[i][j] != 0) Res = 0 M = int(input()) for _ in range(M): x1, y1, x2, y2 = map(int, input().split()) if S[x2][y2] - S[x2][y1 - 1] - S[x1 - 1][y2] + S[x1 - 1][y1 - 1] == 0: Res += 1 print(Res) if __name__ == "__main__": main() </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width