Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)

Dies ist ein Übersichtsartikel für Anfänger von Wettkampfprofis.

Die Lösung, die ich hier schreibe, wird geschrieben, während ich mir den Kommentar und die Beiträge anderer Leute ansehe. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.

A - Lucky 7

Es ist eine Frage zu beantworten, ob die angegebene dreistellige Zahl eine Zahl mit 7 ist.

Ich denke, es wird vergehen, egal wie du es schreibst. Ist es das Beste, es als Zeichenkette zu behandeln und seine Existenz mit "in" zu überprüfen?

S = input()
if '7' in S:
    print('Yes')
else:
  print('No')

B - FizzBuzz Sum

Es ist eine Frage, nur die Zahlen, die nicht Fizz oder Buzz sind, bis zur angegebenen Zahl K zu zählen und zu beantworten, wie viele sie insgesamt sein werden.

Ich schrieb es so wie es war und es ging vorbei. Wenn $ O (n) $ bei $ N = 10 ^ 6 $ liegt, muss die Effizienz nicht verbessert werden.

count = 0
n = int(input())
for i in range(1, n+1):
  if i%3 and i%5:
    count += i
print(count)

C - Sum of gcd of Tuples (Easy)

Es ist eine Frage zu beantworten, wie viele maximale Versprechen für alle drei Zahlen unter K addiert werden.

Erstellen Sie alle Kombinationen mit itertools.combinations_with_replacement, um die maximale Verpflichtung zu ermitteln. Fügen Sie das 6-fache für $ a \ neq b \ neq c $ und das 3-fache für $ a \ neq b = c $ hinzu .. Ich habe versucht, schneller zu werden, indem ich die einmal berechnete Versprechensnummer gespeichert habe. Es sieht nicht sehr hübsch aus, aber es ist weg.

import itertools
import math
K = int(input())
g = [[0] * (K+1) for _ in range(K+1)]
out = 0
for a, b, c in itertools.combinations_with_replacement(range(1, K+1), 3):
  if g[a][b] == 0:
    g[a][b] = math.gcd(a, b)
  d = g[a][b]
  if g[d][c] == 0:
    g[d][c] = math.gcd(d, c)
  if a == b and b == c:
    out += g[d][c]
  elif a != b and b != c:
    out += g[d][c] * 6
  else:
    out += g[d][c] * 3
print(out)

D - RGB Triplets

Es ist eine Frage, wie viele Kombinationen von drei Arten von RGB gemacht werden können. Die Kombination wird jedoch unter bestimmten Bedingungen gespielt.

Alle RGB-Kombinationen haben $ R-Nummer \ mal G-Nummer \ mal B-Nummer $. Subtrahieren Sie von hier die Anzahl der Kombinationen, die die Bedingung erfassen.

Die Ausschlussbedingung "Kombination durch einen bestimmten Abstand getrennt" kann erhalten werden, indem der Abstand und der Startpunkt mit for für $ O (n ^ 2) $ gedreht werden. Wenn dieser Index R, G und B ausfüllt, wird er als Ausschlussziel aufgenommen.

Also habe ich den folgenden Code geschrieben. Ich ging daran vorbei.

import itertools
N = int(input())
S = input()
out = S.count('R') * S.count('G') * S.count('B')

RGBs = list(itertools.permutations(['R', 'G', 'B'], 3))

for i in range(1, N):
  for j in range(N-i*2):
    if (S[j], S[j+i], S[j+i*2]) in RGBs:
      out -= 1
print(out)

E - Sum of gcd of Tuples (Hard)

Auch hier ist das Problem das maximale Versprechen, aber der Wert hat sich so stark erhöht, dass die vorherige Lösung es nie rechtzeitig schaffen wird.

Ich gab auf. Siehe den Kommentar.

Da es keine Zeit gibt, alle Kombinationen von $ a, b, c, ... $ zu finden, um $ \ gcd (a, b, c, ...) = X $ zu finden, ist ein bestimmtes $ X $ erfüllt. Zählen Sie die Anzahl der Kombinationen von $ a, b, c, ... $.

Die Tatsache, dass die maximale Verpflichtung von $ a, b, c, ... $ $ X $ ist, bedeutet, dass "alle $ a, b, c, ... $ durch $ X $ geteilt werden" "$ a, Alle von b, c, ... $ werden nicht durch $ n \ times X $ gebrochen (sondern $ n> 1 $). "

Betrachten Sie zunächst die Bedingung, dass "alle $ a, b, c, ... $ durch $ X $ teilbar sind". Unter den Zahlen von K bis 1 gibt es $ K \ über X $, die Vielfache von X sind. Da nur N von ihnen in einer Reihe stehen, gibt es $ ({K \ over X}) ^ N $ Kombinationen von $ a, b, c, ... $.

Darüber hinaus sucht die Bedingung, dass "alle $ a, b, c, ... $ nicht durch $ n \ mal X $ (jedoch $ n> 1 $) gebrochen werden" in absteigender Reihenfolge nach X und $ 2X, 3X , ... Sie können die Anzahl der Kombinationen von Dingen, die ein Vielfaches von $ sind, nacheinander subtrahieren.

Auf diese Weise wird die Anzahl der Kombinationen erhalten, die zu X werden, so dass sie erhalten werden kann, indem die Anzahl jeder Kombination x der Wert von X summiert wird.

Die Implementierung ist also wie folgt.

N, K = map(int, input().split())
li = [0]*(K+1)

out = 0
mod = 10**9+7

for i in range(K, 0, -1):
  li[i] = pow(K//i, N, mod) 
  for j in range(i*2, K+1, i):
    li[i] -= li[j]
  out += li[i] * i
print(out%mod)

Das ist alles für diesen Artikel.

Recommended Posts

Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 163 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 153 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 160 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 157 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 161 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 156 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 166 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 165 bis Frage E (Python)
atcoder Review des Panasonic Programming Contest 2020, bis zu Frage E (Python)
Überprüfung des Atcoders ABC158 bis Frage E (Python)
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 046 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 049 Rückblick auf frühere Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen