1233 - Paint
Roberto are suflet de artist. El visează să ajungă într-o bună zi un pictor celebru, dar pentru moment își câştigă existența ca zugrav.
Roberto a primit sarcina de a zugrăvi un zid având lungimea n
metri şi înălţimea un metru. Pentru aceasta are la dispoziţie m
zile. În fiecare zi i
, el acoperă cu un singur strat de vopsea o porţiune compactă de înălțime un metru și de lungime l[i]
metri, începând de la distanţa d[i]
metri faţă de capătul din stânga al zidului.
Roberto ştie din experienţă că fiecare porţiune de zid trebuie acoperită cu cel puţin K
straturi de vopsea pentru ca stratul final de vopsea să aibă consistenţa dorită. Din nefericire, firea lui de artist nu i-a permis să-şi poată planifica munca în mod optim, astfel că la capătul celor m
zile de efort, Roberto a constatat că zidul are porţiuni pe care le-a acoperit de mai mult de k
ori şi alte porţiuni pe care le-a acoperit de mai puţin de k
ori.
Pentru a recupera în proprii săi ochi dar mai ales în ochii şefului de echipă, el trebuie să afle mai întâi suprafaţa totală a tuturor porţiunilor de zid care mai trebuie zugrăvite.
Cerinţă[edit | edit source]
Cunoscând lungimea zidului n
, numărul de zile m
şi porţiunile compacte pe care le zugrăveşte în fiecare zi, determinaţi suprafaţa totală a zidului care mai trebuie zugrăvită.
Date de intrare[edit | edit source]
Fișierul de intrare input.txt
conține pe prima linie trei numerele naturale n k m
separate printr-un spațiu, unde n
este lungimea zidului, k
este numărul minim de straturi de vopsea pentru a se obţine consistenţa dorită, iar m
este numărul de zile în care Roberto pictează.
Pe următoarele m
linii se află câte două valori naturale separate prin câte un spațiu. Numerele d[i]
şi l[i]
de pe linia i+1
reprezintă distanţa faţă de capătul din stânga al zidului de la care începe să zugrăvească în ziua i
, respectiv lungimea în metri a porţiunii de zid zugrăvite în ziua i
.
Date de ieșire[edit | edit source]
Fișierul de ieșire output.txt
va conține pe prima linie un număr natural S
care reprezintă suprafaţa totală a zidului care nu a fost acoperită cu cel puţin k
straturi de vopsea.
Restricții și precizări[edit | edit source]
1 ≤ n, m ≤ 250 000
Exemplul 1[edit | edit source]
input.txt:
5 2 3
0 2
1 3
2 3
output.txt:
2
Explicație:
n = 5
, k = 2
, m = 3
.
În prima zi Roberto vopsește 2
m din zid între pozițiile 0
și 2
. În a doua zi Roberto vopsește 3
m din zid între pozițiile 1
și 4
. În a treia zi Roberto vopsește 3
m din zid între pozițiile 2
și 5
.
Deci, începând cu capătul din stânga al zidului, se va găsi o porțiune de zid de lungime 1
, acoperită cu un singur strat și începând de la distanța 4
față de capăt, se va găsi o altă porțiune de zid de lungime 1
, acoperită cu un singur strat.
Exemplul 2[edit | edit source]
input.txt:
9999999999999999 2 3
0 2
1 3
2 3
Output:
Invalid input. Please ensure 1 <= n, m <= 250,000.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def validate_input(n, m):
if not (1 <= n <= 250000) or not (1 <= m <= 250000): print("Invalid input. Please ensure 1 <= n, m <= 250,000.") exit()
with open("input.txt", "r") as fin, open("output.txt", "w") as fout:
n, k, m = map(int, fin.readline().split()) validate_input(n, m) a = [0] * (n + 3)
for _ in range(m): d, L = map(int, fin.readline().split()) a[d] += 1 a[d + L] -= 1
D = 0 cnt = 0
for i in range(n + 1): cnt += a[i] if cnt < k: D += 1
fout.write(str(D - 1) + '\n')
</syntaxhighlight>