Atcoder Acing Programmierwettbewerb Python

Zusammenfassung

Es war schwer. Es waren A, B, C 3 Fragen AC. Ich kenne die Binärzahl nicht gut, daher überspringt D den Moment, in dem ich das Problem sehe, und ich habe das Gefühl, dass ich das E-Problem lösen kann, aber ich verstehe es nicht, selbst wenn ich mir das Antwortbeispiel ansehe.

Problem

(https://atcoder.jp/contests/aising2020/tasks)

A. Number of Multiples image.png

Antworten

L, R, d = map(int, input().split())

count = 0
for i in range(L, R+1):
    if i % d == 0:
        count += 1

print(count)

Ich habe es gehorsam geschrieben. Andere scheinen cooler zu schreiben.

B. An Odd Problem image.png

Antworten

N = int(input())
a = list(map(int, input().split()))

count = 0
for i in range(0, N, 2):
    if i % 2 == 0 and a[i] % 2 != 0:
        count += 1
print(count)

Ich habe das auch ehrlich geschrieben. Das Problem ist seltsam, aber die Indizes in der Liste sind gerade.

C. XYZ Triplets image.png

Antworten
N = int(input())

keys = [i for i in range(1, N+1)]
values = [0] * N
count_dict = dict(zip(keys, values))

for x in range(1, N//6+7):
    for y in range(x, N//6+7):
        for z in range(y, N//6+7):
            n = x**2 + y**2 + z**2 + x*y + y*z + z*x
            if n > N:
                break
            if x == y and y == z:
                count_dict[n] += 1
            elif x != y and x != z and y != z:
                count_dict[n] += 6
            else:
                count_dict[n] += 3

for v in count_dict.values():
    print(v)

Um ehrlich zu sein, drehen Sie die for-Schleife des Bereichs (1, N + 1) für x, y, z und x ** 2 + y ** 2 + z ** 2 + x Es scheint, dass * y + y * z + z * x = n``` beurteilt werden sollte. Da die Einschränkung jedoch 10 ** 4 beträgt, ist es nicht rechtzeitig, wenn Sie normalerweise eine Dreifachschleife ausführen. Reduzieren Sie daher den Rechenaufwand.

Das erste, woran ich dachte, war, dass wenn `(x, y, z) = (1,1,1)`, n 6 ist, also ist der Maximalwert, der in einer for-Schleife gedreht werden kann, `. N // 6 sieht gut aus. Da der Index jedoch "+ 1" sein muss, habe ich "N // 6 + 7" mit einem Rand gewählt. (In der Produktion habe ich `` N // 6 + 7 verwendet, aber wenn ich die Einschränkung` `` 10 ** 4 umgekehrt verwende, `(x, y, z)` Sie können sehen, dass nur bis zu ungefähr 100 verwendet werden kann. Ich habe dies während der Produktion nicht bemerkt ...)

Es scheint also, dass dies allein wahrscheinlich nicht rechtzeitig sein wird, daher werde ich erwägen, den Rechenaufwand etwas weiter zu reduzieren.

Wenn Sie einige Beispiele nennen, werden Sie Folgendes bemerken.

Daher ist der Bereich der for-Schleife von x, y, z `Bereich (1, N // 6 + 7)` Bereich (x, N // 6 + 7) . Als `` Bereich (y, N // 6 + 7)` `` scheint es, dass die Anzahl in den obigen drei Fällen +6, +3, +1 sein sollte.

Wenn danach n N überschreitet, können Sie es schaffen, indem Sie `` `break``` hinzufügen.

Recommended Posts

Atcoder Acing Programmierwettbewerb Python
Acing Programmierwettbewerb 2020
Teilnahmebericht des AtCoder Acing Programming Contest 2020
Atcoder Anfänger Wettbewerb 152 Kiroku (Python)
atCoder 173 Python
Teilnahmebericht des AtCoder HHKB Programmierwettbewerbs 2020
Teilnahmebericht des AtCoder Keyence Programming Contest 2020
AtCoder Anfängerwettbewerb 174 C Problem (Python)
Teilnahmebericht des AtCoder Panasonic Programming Contest 2020
atcoder Review des Panasonic Programming Contest 2020, bis zu Frage E (Python)
Python-Programmierhinweis
AtCoder Anfängerwettbewerb 179
AtCoder ABC 174 Python
Teilnahmebericht zum AtCoder Library Practice Contest (Python)
[Python] [Erklärung] AtCoder Typischer DP-Wettbewerb: Ein Wettbewerb
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 180
HHKB Programmierwettbewerb 2020
Programmieren mit Python
AtCoder Anfängerwettbewerb 173
AtCoder Anfängerwettbewerb: D Problemantworten Python
Atcoder Anfänger Wettbewerb 153
AtCoder ABC 175 Python
AtCoder-Anfängerwettbewerb 167 B Problem "Einfache lineare Programmierung" Erläuterung (Python3, C ++, Java)
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Täglicher AtCoder # 53 in Python
AtCoder Anfängerwettbewerb 181 Hinweis
AtCoder Grand Contest 041 Bewertung
Täglicher AtCoder # 33 in Python
Täglicher AtCoder # 7 in Python
AtCoder Regular Contest 105 Bewertung
AtCoder # 24 jeden Tag mit Python
Täglicher AtCoder # 37 in Python
Löse AtCoder 167 mit Python
AtCoder # 8 jeden Tag mit Python
Täglicher AtCoder # 42 in Python
Keyence Programming Contest 2020 Rückblick
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
[Python] Sumitomo Mitsui Trust Bank Programmierwettbewerb 2019 C (Verwendung von DP) [AtCoder]
AtCoder Anfängerwettbewerb 166 Bewertung
Täglicher AtCoder # 21 mit Python
AtCoder Anfängerwettbewerb 167 Bewertung
Täglicher AtCoder # 17 mit Python
Täglicher AtCoder # 38 in Python
3. 3. KI-Programmierung mit Python
Täglicher AtCoder # 54 in Python
AtCoder Regular Contest 106 Hinweis
Täglicher AtCoder # 11 in Python
Täglicher AtCoder # 15 in Python
Täglicher AtCoder # 47 mit Python
Täglicher AtCoder # 13 in Python
AtCoder Anfängerwettbewerb 182 Hinweis