[Bei Coder] Lösen Sie das ABC183 D-Problem mit Ruby

Der braune Codierer versuchte, das ABC183 D-Problem mit Ruby zu lösen.

Problem

AtCoder Beginner Contest 183

D - Water Heater

Es gibt einen $ 1 $ Warmwasserbereiter, der $ W $ Liter heißes Wasser pro Minute liefern kann. Es gibt $ N $ Leute. Die $ i $ -te Person plant, jede Minute zwischen $ S_i $ und $ T_i $ (außer nur der Zeit $ T_i $) $ P_i $ Liter Wasser zu verwenden, das in diesem Warmwasserbereiter gekocht wird. Das heiße Wasser kühlt schnell ab und kann nicht gespeichert werden. Ist es möglich, alle wie geplant mit heißem Wasser zu versorgen?

Zwang

1 \leq N \leq 2 \times 10^5 0 \leq S_i \leq 2 \times 10^5 1 \leq W, P_i \leq 10^9 Alle Eingaben sind Ganzzahlen

Eingang

N W S_1 T_1 P_1S_N T_N P_N

Antworten

nw = gets.chomp.split.map(&:to_i)
n = nw[0]
w = nw[1]

#Ein Array, das die pro Stunde verbrauchte Wassermenge speichert
a = Array.new(200005, 0)

n.times do
    stp = gets.chomp.split.map(&:to_i)
    s = stp[0]
    t = stp[1]
    p = stp[2]

    #Vorbereitung für "Array zum Speichern der kumulativen Summe"
    a[s] += p
    a[t] -= p
end

result = true

#Kumulative Summe speichern
200001.times do |i|
    if a[i] > w
        result = false
        break
    end
    a[i+1] += a[i]
end

puts result ? "Yes" : "No"

Denkweise

Verwenden Sie die kumulative Summe. Denken Sie jedoch daran, dass Sie dies später tun werden, nicht von Anfang an.

  1. Bereiten Sie ein Array vor, um die pro Stunde verbrauchte Wassermenge zu speichern
  2. Erhöhen oder verringern Sie die Wassermenge, die nur zu Beginn und am Ende des Gebrauchs verbraucht wird
  3. Berechnen Sie die kumulierte Summe des Wasserverbrauchs für jede Stunde

Bereiten Sie ein Array vor, um die pro Stunde verbrauchte Wassermenge zu speichern

Da es sich um $ T_i \ leq 2 \ times 10 ^ 5 $ handelt, bereiten Sie ein Array mit $ 200001 $ oder mehr Elementen vor.

Erhöhen oder verringern Sie die Wassermenge, die nur zu Beginn und am Ende der Verwendung verwendet wird

Wie oben erwähnt, geht es zunächst nicht darum, die kumulative Summe zu berechnen. Wenn Sie von Anfang an danach fragen, wird Ihnen die Ausführungszeit ausgehen.

Wenn Sie Informationen für $ N $ Personen eingeben, erhöhen oder verringern Sie zunächst nur die Menge an Wasser, die zu Beginn und am Ende der Verwendung verbraucht wird. Gehen Sie insbesondere wie folgt vor.

Berechnen Sie die kumulierte Summe des Wasserverbrauchs für jede Stunde

Danach berechnen wir die kumulierte Summe wie gewohnt. Es ist in Ordnung, wenn Sie beurteilen, ob es $ W $ überschreitet.

Impressionen

Ich habe von Anfang an nach der kumulierten Summe gefragt, konnte aber keine AC durchführen, da die Ausführungszeit nicht ausreichte. Weinen Erhöhen Sie die Menge an Wasser, die nur zu Beginn des Gebrauchs verbraucht wird, und verringern Sie sie erst am Ende des Gebrauchs. Ich sehe, ich fühle mich wie ich diese Hand hatte.

Recommended Posts

[Bei Coder] Lösen Sie das ABC183 D-Problem mit Ruby
[Bei Coder] Lösen Sie das ABC182 D-Problem mit Ruby
[Competition Pro] Löse Rucksackprobleme mit Ruby
AtCoder ABC127 D Hash mit Ruby 2.7.1 zu lösen
[Anfänger] Lösen wir das AtCoder-Problem mit Ruby, während wir uns den Artikel ansehen!
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
[At Coder] Einführung von Competitive Pro mit Ruby
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Atcoder ABC70 D Problem
AtCoder ABC129 D 2D-Array In Ruby und Java gelöst
Löse das diskrete Logarithmusproblem mit einem beliebigen Mod
Lösen wir das FizzBuzz-Problem!
[Ruby] Problem mit der if-Anweisung
Programmieren mit Ruby (unterwegs)
Lösen Sie ARC104 D Multiset Mean mit Scala, Java, C ++, Ruby, Perl, Elixir
Lösung des Rucksackproblems mit dynamischer Planung
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby zu lösen (Zeitlimit 10 Minuten).
Rubinproblem ⑦
[Ruby] Definieren Sie die Hierarchie gleichzeitig mit der Initialisierung von Hash mit der Tap-Methode
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Verwalten Sie die Version von Ruby selbst mit rbenv
Ein kurzer Blick auf das Monty Hall-Problem
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
[Java] Versuchen Sie, das Fizz Buzz-Problem zu lösen
Ich habe die Anzahl der Taxis mit Ruby überprüft