[RUBY] AtCoder Anfängerwettbewerb 168

Die dritte Herausforderung.

Ein Problem

Ein Beispiel für die Verwendung der case-Anweisung, aber schreiben Sie alles auf und übergeben Sie

abc168a.rb


n = gets.chomp.to_s[-1,1]
#puts n
#puts n[-1,1]
if n=="3"
    puts "bon"
else
    if  n== "0"
    puts "pon"
    else
        if n== "1"
        puts "pon"
        else
            if n== "6"
                puts "pon"
            else
                if n=="8"
                    puts "pon"
                else
                    puts "hon"
                end
            end
        end
    end
end

Richtig umgeschrieben mit einer case-Anweisung.

case.rb


n = gets.chomp.to_s[-1,1]
case n 
when "3"
    puts "bon"
when "0","1","6","8"
    puts "pon"
else
    puts "hon"
end

B Problem

Wenn die Ausgabe lang ist, ist es klüger, sie auszuschneiden und am Ende 3 Punkte hinzuzufügen, anstatt die Ausgabe in Fälle aufzuteilen.

abc168b.rb


k = gets.chomp.to_i
s = gets.chomp.to_s
if s.length <= k
    puts s
else
    print s[0..k-1]
    print "..."
end 

C Problem

Da die Koordinaten der Spitze beider Nadeln erhalten werden können, kann der Abstand zwischen den beiden Punkten direkt berechnet werden. Wenn Sie jeden numerischen Wert als Ganzzahl behandeln, wird er zur Hälfte AC und zur Hälfte WA des Testfalls. Konvertieren Sie ihn also nach einer Weile in Float und AC. Wie in der Erklärung erwähnt, reduziert das Lösen mit dem Kosinussatz den Rechenaufwand um 3 Dreiecksfunktionen. Ist dies jedoch in Ordnung, da keine Schleife vorhanden ist?

abc168c.rb


imput = gets.chomp.split(" ").map!{|item| item.to_i}
a = imput[0].to_f
b = imput[1].to_f
h = imput[2].to_f
m = imput[3].to_f

hang = Math::PI*(30*h + m/2)/180
mang = Math::PI*m*6/180

hy = Math.sin(hang)*a
hx = Math.cos(hang)*a
my = Math.sin(mang)*b
mx = Math.cos(mang)*b
puts Math.sqrt((hy-my)**2 + (hx-mx)**2)

Wenn der kurze Zeiger als Koordinatenachse verwendet wird, wird die Berechnung für zwei Dreiecksfunktionen reduziert.

abc168c.rb


imput = gets.chomp.split(" ").map!{|item| item.to_f}
a = imput[0]
b = imput[1]
h = imput[2]
m = imput[3]

hang = Math::PI*(30*h + m/2)/180
mang = Math::PI*m*6/180
ang = mang - hang

mx = Math.cos(ang)*b
my = Math.sin(ang)*b

puts Math.sqrt((a-mx)**2 + (my)**2)

Ich gab auf, weil ich das D-Problem nicht lösen konnte, nachdem ich das D-Problem mehr als 60 Minuten hier gelesen hatte. Die einzige Möglichkeit, D / E / F herauszufordern, besteht darin, ein Beispiel eines Algorithmus zu lösen und es zu erwerben. Es scheint notwendig zu sein, eine Reihe von Standardfragen der Vergangenheit zu behandeln, um diesmal nicht von Machtfähigkeiten wie dem A-Problem abhängig zu sein.

Recommended Posts

AtCoder Anfängerwettbewerb 168
AtCoder Beginner Contest 182 Teilnahmeartikel
AtCoder Anfängerwettbewerb 132 D Problem
Löse den AtCoder-Anfängerwettbewerb 151 mit Java
Löse den AtCoder-Anfängerwettbewerb 153 mit Java
Löse den AtCoder-Anfängerwettbewerb 160 mit Java
Löse den AtCoder-Anfängerwettbewerb 152 mit Java
Löse den AtCoder-Anfängerwettbewerb 156 mit Java
AtCoder Anfängerwettbewerb 167 C Problem (Java)
AtCoder Anfängerwettbewerb 169 A, B, C mit Rubin
AtCoder Anfängerwettbewerb 170 A, B, C bis Rubin
Ruby mit AtCoder 6 lernen [Contest 168 Daher]
Lösen mit Ruby AtCoder ACL Anfängerwettbewerb C Union Find (DSU)
Java Anfänger 4
Ruby mit AtCoder 7 lernen [Contest 168 Triple Dots]
Java Anfänger
Eine Geschichte über einen Super-Anfänger, der zum ersten Mal am AtCoder-Wettbewerb teilnimmt (AtCoder-Anfängerwettbewerb 140)