[PYTHON] AtCoder Ich kenne kein Tagebuch_3 ABC149C, D.

Einführung

ABC149 hat ebenfalls teilgenommen. Ich bin ein Kind geworden. Ich war dumm, also habe ich die Problemstellung in Problem A falsch verstanden und einen Fehler gemacht. Anstatt das Ergebnis im B-Problem zu erhalten, habe ich versucht, eine wörtliche Operation durchzuführen, mich an den Rechenaufwand erinnert und die Richtung schnell angepasst, und was ich vor dem letzten Mal zweimal getan habe, ist ein wenig lebendig ... ... Ich fühle. Qiita, ich möchte dieses Tagebuch zu einer Vorlage machen, aber was soll ich tun? Ist es das, was ich in der Programmierung schreiben sollte? Ich denke, es ist schneller, es in einen Notizblock einzufügen und zu kopieren, als den Editor zu öffnen und etwas zu tun. Ich habe das Gefühl, dass es viele Leute und Programmierer gibt, die versuchen, auf diese Weise Spaß zu haben und problematischere Dinge zu tun. Es ist ein Vorurteil.

C - Next Prime Finden Sie die kleinste der Primzahlen größer oder gleich X.

Gedanken

(1) Wie lang ist das Intervall zwischen Primzahlen (es scheint im Durchschnitt etwas mehr als 10 zu sein)? (2) Ich denke, wir haben keine andere Wahl, als es aufzuschlüsseln. ③ TLE beängstigend Diese Problemstellung ist einfach und nett. Ich fragte mich, ob ich die Legendre-Vorhersage verwenden könnte, aber ich brauchte sie nicht.

Erstes Mal

Es ist das erste Mal, also nur einmal

import math
n=int(input())
#Starten Sie die Schleife mit einer ungeraden Zahl
if n % 2 == 0 and n != 2:
        n += 1
#Versuchen Sie es 20 Mal mit einem Rand
while n <= n + 20:
    i=3
    #Teilen Sie weiter durch ein ungerades i, das kleiner als die Quadratwurzel ist
    while i <= math.sqrt(n):
        #Wenn es kaputt geht, wird das nächste n
        if n % i == 0:
            break
        #Wenn es nicht kaputt geht, das nächste i
        else:
            i += 2
    #Wenn nicht alles kaputt geht, ist das die Antwort, also ist es vorbei
    if i >= math.sqrt(n):
        print(n)
        break
    else:
        n+=2

Ich bestand. Hmmm. Ich denke, es gibt einen besseren Weg ...

if i >= math.sqrt(n):

Ich denke jedoch, dass es eine sehr beschissene Art ist, dies zu tun. Ich frage mich, was ich tun soll, wenn ich es getan habe, ohne die Schleife zu durchbrechen, aber ich denke, es gibt einen besseren Weg, dasselbe zu tun ... Auch in Bezug auf Primzahlen habe ich eine 20-fache Schleife gemacht, unter der Annahme, dass ungefähr 20 für die Stufe 10 5 </ sup> ausreichen würden, aber ich frage mich, ob dies in Ordnung ist ...

Antwort des starken Mannes (Tsuyobito)

Es war eine überraschend normale Round-Robin-Arbeit. Erstens wusste ich, dass es nicht so oft enden würde, also habe ich die Größe von i nicht durch die while-Anweisung definiert, und ich hätte die for-Anweisung verwenden sollen. Ebenso musste ich es nicht zweimal benutzen. Da ich vor dem letzten Mal zwei Mal TLE geworden bin, habe ich mir vorgenommen, es nur durch eine ungerade Zahl zu teilen, um keine Last zu setzen, aber ich dachte, dass dies nicht unerwartet notwendig ist. Wenn Sie den Berechnungsbetrag für diesen Betrag grob vorhersagen können, wissen Sie, wie viel er ist. Aus diesem Grund weiß ich es nicht, aber die Ausführungszeit war schnell. Es gab auch nicht viele Leute, die die Quadratwurzel zum Teilen benutzten. Die Wettbewerbsprogrammierung ist jedoch stark davon abhängig, wie schnell Sie Code schreiben, sodass es nicht so rechenintensiv sein muss. Aber ich frage mich, ob es erheblich abnehmen wird.

Ich frage mich, welche Art von Code gut ist, um die Beiträge aller zu sehen. Natürlich sollte es leicht zu verstehen sein, schnell und kurz, aber es ist schwierig, sie auszugleichen. Das Schreiben von Code, der in einer Zeile endet, ist nicht lesbar, und frühestens ist ein solcher redundanter Code nicht gut.

Schreiben wir D, bevor wir es vergessen.

D - Prediction and Restriction

Takahashi beschloss, im Game Center ein Spiel namens "Janken Battle" zu spielen. Die Regeln dieses Spiels sind wie folgt.

Es ist jedoch nicht möglich, den gleichen Zug wie vor Jahren mit dem Janken K zu machen. (Sie können Ihre Lieblingshand mit den Janken bis zur K-Zeit ausstrecken.) Der Fall entscheidet, welcher Zug in jedem Janken ausgeführt wird, bevor das Spiel beginnt. Herr Takahashi, ein talentierter Mensch, las dies alles, bevor das Spiel begann. Die von Herrn Takahashi gelesenen Informationen werden als Zeichenkette T angegeben. Wenn der i-Buchstabe (1 ≤ i ≤ N) von T r ist, gibt das Gehäuse am i-ten Janken eine Gänsehaut, wenn es s ist, gibt es ein Choki, und wenn es p ist, gibt es ein Par. Repräsentiert. Wenn Takahashi den besten Zug für N-mal auswählt, wie viele Punkte kann er bis zum Ende des Spiels erhalten?

Gedanken

① Wenn Sie nach k-mal leiden, verlieren Sie, zählen Sie also nicht ② Ersetzen Sie die nicht gezählten Zeichen und zählen Sie am Ende die Anzahl der gültigen Stein-Papier-Scheren. Es gibt viele talentierte Leute in At Corder. Ich möchte alle versammeln und sie kämpfen lassen.

Erstes Mal

n,k = map(int,input().split())
r,s,p = map(int,input().split())
st = input()
for i in range(len(st)-k):
    if st[i] == st[i + k]:
        st = st[:i + k]+ 'no' + st[i + k + 1:]
win = r*st.count('s') + s*st.count('p') + p*st.count('r')
print(win)

Ich bestand. Ich konnte die Zeichenkette nicht ersetzen, also habe ich sie in Scheiben geschnitten und verbunden. Tsuka len (st). Es gibt n.

Antwort des starken Mannes (Tsuyobito)

Alles andere war ungefähr gleich. Die Ausführungszeit ist sehr lang, wahrscheinlich weil es sich um eine Zeichenfolge handelt. Als ich es auf der Liste versuchte, wurden 598 ms zu 47 ms. Ziemlich dumm. Es gibt einige schlechte Punkte, aber ich konnte es unerwartet tun. Ich kann es nicht rechtzeitig tun. Ich möchte weiterhin mein Bestes geben.

Recommended Posts

AtCoder Ich kenne kein Tagebuch_3 ABC149C, D.
AtCoder Ich kenne Tagebuch_2 ABC148E nicht
AtCoder Ich kenne kein Tagebuch_4 ABC081B, 087B, 083B (von ABS)
Ich kenne den Wertfehler nicht
Ich verstehe nicht mitmachen