AtCoder ABC177 A-D mit Python

AtCoder ABC177 Ich habe versucht, das A-D-Problem mit Python zu lösen.

Ich habe an AtCoder ABC177 teilgenommen, daher werde ich es als Aufzeichnung veröffentlichen.

Ein Problem

Takahashi trifft sich mit Aoki. Der Treffpunkt ist D Meter von Takahashis Haus entfernt und die Treffzeit ist T Minuten später. Herr Takahashi wird von nun an sein Haus verlassen und mit S Metern pro Minute direkt zum Treffpunkt gehen. Wirst du pünktlich zum Treffen sein?

Gedanken

Die maximale Entfernung, die Takahashi, der sich mit S Metern pro Minute bewegen kann, in T Minuten zurücklegen kann, beträgt S * T. Sie können diesen Wert mit D vergleichen. (Ich habe versehentlich 1WA für die Ungleichung erhalten ())

d, t, s = map(int, input().split())
if s*t >= d:
    print("Yes")
else:
    print("No")

B Problem

Es sind zwei Zeichenfolgen S und T angegeben. Schreiben Sie einige Buchstaben von S neu, so dass T eine Teilzeichenfolge von S ist. Zumindest wie viele Zeichen muss ich umschreiben?

Gedanken

Verschieben Sie von len (S)> = len (T) die Zeichenfolge T in S, und die Antwort ist der Wert, der durch Subtrahieren der maximalen Anzahl übereinstimmender Zeichen von len (T) erhalten wird.

s = input()
t = input()
sl = len(s)
tl = len(t)

cnt = 0
ans = 0

for i in range(sl-tl+1):
    for j in range(tl):
        if t[j] == s[i+j]:
            cnt += 1
    
    ans = max(cnt, ans)#ans:Maximale Anzahl übereinstimmender Zeichen
    cnt = 0

print(tl - ans)

C Problem

N ganze Zahlen A1,…, AN sind gegeben. Finden Sie die Summe von Ai × Aj für alle Paare (i, j), die 1 ≤ i <j ≤ N mit mod (10 ** 9 + 7) erfüllen.

Gedanken

Wenn Sie die for-Anweisung ehrlich verdoppeln, ist sie eher TLE als O (N ^ 2) ... Als ich es vorerst schrieb, fand ich Folgendes. Betrachten Sie die Zeit von ex.i = 1, 2, .... Sei sum = A1 + A2 + ... AN. Wenn i = 1 A1 x A2 + A1 x A3 + A1 x A4 + A1 ・ ・ A1 + A1 x AN = A1 x (sum - A1) Wenn i = 2 A2 x A3 + A2 x A4 + A2 x A5 + A ・ ・ A + A2 x AN = A2 x (sum - A1 - A2) Wenn dies der Fall ist, kann dies durch O (N) unterdrückt werden. Wenn Sie dies in Python implementieren,

n = int(input())
A = [0]+list(map(int, input().split()))
mod = 10**9 + 7
S = sum(A)
ans = 0

for i in range(1, n):
    ans += A[i]*(S-A[i])
    ans %= mod
    S -= A[i]

print(ans)

D Problem

Es gibt N Personen von 1 bis N. Sie erhalten M Informationen, dass "People Ai und People Bi Freunde sind". Die gleichen Informationen können mehrfach gegeben werden. Wenn X und Y Freunde sind und Y und Z Freunde sind, dann sind X und Z auch Freunde. Es gibt auch keine Freundschaften, die nicht aus M Informationen abgeleitet werden können. Der böse Takahashi versucht, diese N Menschen in mehrere Gruppen aufzuteilen und eine Situation zu schaffen, in der jeder "keine Freunde in derselben Gruppe" hat. Wie viele Gruppen sollte ich mindestens teilen?

Gedanken

Beantworten Sie einfach die maximale Anzahl von Elementen im Set mit UnionFindTree. Dies liegt daran, dass die größte Menge zerlegt werden kann und die Elemente der anderen Mengen jedem Element zugewiesen werden können. Sie können die Erklärung von UnionFindTree verstehen, indem Sie sich Katsuppas Video auf Youtube ansehen. Probleme mit der Zeichenfolge 'Freund' werden wahrscheinlich mit UnionFind () verwendet.

import sys
sys.setrecursionlimit(10 ** 9)

class UnionFind():
    def __init__(self, n):
        self.n = n
        self.root = [-1]*(n+1)
        self.rank = [0]*(n+1)

    def find(self, x):#Suchen Sie nach übergeordneten Elementen
        if self.root[x] < 0:
            return x
        else:
            self.root[x] = self.find(self.root[x])#Rekursiv
            return self.root[x]

    def unite(self, x, y):
        x = self.find(x)
        y = self.find(y)
        if x == y:
            return

        elif self.rank[x] > self.rank[y]:#Verbunden mit einem tiefen Baum
            self.root[x] += self.root[y]
            self.root[y] = x#Sei x das Elternteil von y

        else:
            self.root[y] += self.root[x]
            self.root[x] = y
            if self.rank[x] == self.rank[y]:
                self.rank[y] += 1
    
    def issame(self, x, y):#x,Bestimmen Sie, ob y dieselbe Menge ist
            return self.find(x) == self.find(y)

    
    def count(self, x):#Anzahl der Elemente
        return (-1)*self.root[self.find(x)]

n, m = map(int, input().split())
uf = UnionFind(n)

for i in range(m):
    a, b = map(int, input().split())
    uf.unite(a, b)

ans = 0

for i in range(n):
    ans = max(ans, uf.count(i))

print(ans)

Recommended Posts

Atcoder ABC167 A-D in Python
Atcoder ABC165 A-D in Python
AtCoder ABC177 A-D mit Python
Löse den Atcoder ABC169 A-D mit Python
Atcoder ABC164 A-C in Python
Atcoder ABC166 A-E in Python
AtCoder ABC 174 Python
AtCoder ABC 175 Python
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 # 53 in Python
Täglicher AtCoder # 33 in Python
Täglicher AtCoder # 7 in Python
Täglicher AtCoder # 37 in Python
AtCoder # 8 jeden Tag mit Python
Täglicher AtCoder # 21 mit Python
Täglicher AtCoder # 38 in Python
Täglicher AtCoder # 11 in Python
Täglicher AtCoder # 15 in Python
Täglicher AtCoder # 47 mit Python
Täglicher AtCoder # 13 in Python
Täglicher AtCoder # 45 mit Python
AtCoder # 30 jeden Tag in Python
Täglicher AtCoder # 10 mit Python
Täglicher AtCoder # 28 in Python
Täglicher AtCoder # 20 in Python
Täglicher AtCoder # 19 in Python
Täglicher AtCoder # 52 in Python
Täglicher AtCoder # 3 in Python
Täglicher AtCoder # 50 mit Python
Täglicher AtCoder # 26 mit Python
Täglicher AtCoder # 4 mit Python
Täglicher AtCoder # 43 in Python
Täglicher AtCoder # 29 in Python
Jeden Tag mit Python AtCoder # 22
Täglicher AtCoder # 27 in Python
AtCoder # 1 jeden Tag mit Python
Löse ABC169 mit Python
Täglicher AtCoder # 25 mit Python
Täglicher AtCoder # 16 in Python
Täglicher AtCoder # 12 in Python
Täglicher AtCoder # 48 in Python
Täglicher AtCoder # 23 in Python
Täglicher AtCoder # 34 in Python
Täglicher AtCoder # 51 mit Python
Täglicher AtCoder # 31 in Python
Jeden Tag mit Python AtCoder # 46
Täglicher AtCoder # 35 mit Python
Täglicher AtCoder # 44 mit Python
Jeden Tag mit Python AtCoder # 41
AtCoder ABC 177 Python (A ~ E)
Löse AtCoder ABC166 mit Python
AtCoder ABC 178 Python (A ~ E)
Löse ABC176 E in Python
Python-Eingabehinweis in AtCoder
AtCoder ABC 176 Python (A ~ E)
Löse ABC175 D in Python