3793 - Cort: Difference between revisions
Pagină nouă: O curte dreptunghiulară de lungime <code>N</code> și lățime <code>M</code> (vom numi <code>N</code> linii și <code>M</code> coloane) este pavată cu dale pătrate de dimensiune <code>1</code>. Dalele au două culori, sunt albe sau negre (vom codifica dalele albe cu <code>0</code> și dalele negre cu <code>1</code>). Dalele negre sunt fabricate dintr-un material mult mai rezistent decât dalele albe, iar Ionel ar vrea sa monteze un cort de suprafață maximă sub care s... |
No edit summary |
||
Line 64: | Line 64: | ||
=== Lipește codul aici === | === Lipește codul aici === | ||
1 | <syntaxhighlight lang="python" line="1"> | ||
import sys | |||
C = int(sys.stdin.readline()) | |||
if C == 1: | |||
N, M = map(int, sys.stdin.readline().split()) | |||
nr = 0 | |||
for i in range(N): | |||
ok = 0 | |||
for j in range(M): | |||
x = int(sys.stdin.readline()) | |||
if x == 1: | |||
ok = 1 | |||
if ok == 1: | |||
nr += 1 | |||
sys.stdout.write(str(nr)) | |||
if C == 2: | |||
N, M = map(int, sys.stdin.readline().split()) | |||
v = [] | |||
for i in range(N): | |||
k = 0 | |||
for j in range(M): | |||
x = int(sys.stdin.readline()) | |||
k += x | |||
v.append(k) | |||
v.sort() | |||
maxim = 0 | |||
for i in range(len(v)): | |||
if v[i] * (N - i + 1) > maxim: | |||
maxim = v[i] * (N - i + 1) | |||
sys.stdout.write(str(maxim)) | |||
</syntaxhighlight> |
Latest revision as of 14:20, 14 December 2023
O curte dreptunghiulară de lungime N
și lățime M
(vom numi N
linii și M
coloane) este pavată cu dale
pătrate de dimensiune 1
. Dalele au două culori, sunt albe sau negre (vom codifica dalele albe cu 0
și dalele negre cu 1
). Dalele negre sunt fabricate dintr-un material mult mai rezistent decât dalele albe, iar Ionel ar vrea sa monteze un cort de suprafață maximă sub care să fie doar dale negre. El știe de asemenea că există doar corturi dreptunghiulare și pătrate, de orice dimensiune. Din motive tehnice, Ionel poate să facă doar următoarele operații cu dalele din curte:
- să schimbe între ele oricâte dale de pe aceeși linie;
- să schimbe de oricâte ori dorește o linie întreagă cu altă linie tot întreagă;
Cerința[edit | edit source]
Scrieți un program care rezolvă următoarele două cerințe:
1. Afișează numărul maxim de dale negre care s-ar putea obține pe o coloană după rearanjare;
2. Afișează aria maximă a cortului ce poate fi amplasat doar pe dale negre.
Date de intrare[edit | edit source]
Fișierul de intrare cort.in
conține pe prima linie un număr natural C
reprezentând cerința din problemă
care trebuie rezolvată (1
sau 2
). A doua linie din fișier conține două numere naturale N
și M
, reprezentând
lungimea, respectiv lățimea curții. Pe fiecare dintre următoarele N
linii se găsesc câte M
valori de 0
sau 1
, acestea indicând culoarea dalei de pe acea poziție.
Date de ieșire[edit | edit source]
Dacă C = 1
, fișierul de ieșire cort.out
va conține un număr reprezentând răspunsul la cerința 1
.
Dacă C = 2
, fișierul de ieșire cort.out
va conține un număr reprezentând răspunsul la cerința 2
.
Restricții și precizări[edit | edit source]
1 ≤ N ≤ M ≤ 1000
- Există cel puțin o dală neagra
Exemplul 1:[edit | edit source]
cort.in
1 6 5 1 0 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
cort.out
4
Explicație[edit | edit source]
Pentru primul exemplu cerința este 1
. Se pot rearanja sub urmatoarea formă:
1 1 1 0 0
1 1 1 1 0
1 0 0 0 0
1 1 1 0 0
0 0 0 0 0
0 0 0 0 0
Pe coloana 1
există 4
dale negre.
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python" line="1"> import sys
C = int(sys.stdin.readline())
if C == 1:
N, M = map(int, sys.stdin.readline().split())
nr = 0
for i in range(N):
ok = 0
for j in range(M):
x = int(sys.stdin.readline())
if x == 1:
ok = 1
if ok == 1:
nr += 1
sys.stdout.write(str(nr))
if C == 2:
N, M = map(int, sys.stdin.readline().split())
v = []
for i in range(N):
k = 0
for j in range(M):
x = int(sys.stdin.readline())
k += x
v.append(k)
v.sort()
maxim = 0
for i in range(len(v)):
if v[i] * (N - i + 1) > maxim:
maxim = v[i] * (N - i + 1)
sys.stdout.write(str(maxim))
</syntaxhighlight>