[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 3/22].

** Streben Sie einen hellblauen Codierer an! !! !! !! !! !! ** **.

Damit [Richtlinien zur Verbesserung von AtCoder, einem von Red Coder gelehrten Wettbewerbsprofi [Zwischenausgabe: Ziel für hellblauen Coder! ]]( https://qiita.com/e869120/items/eb50fdaece12be418faa#2-3-%E5%88%86%E9%87%8E%E5%88%A5%E5%88%9D%E4%B8%AD%E7 % B4% 9A% E8% 80% 85% E3% 81% 8C% E8% A7% A3% E3% 81% 8F% E3% 81% B9% E3% 81% 8D% E9% 81% 8E% E5% 8E % BB% E5% 95% 8F% E7% B2% BE% E9% 81% B8-100-% E5% 95% 8F) (@ e869120)

AtCoder hat 100 gute pädagogische Fragen gesammelt, die für braune und grüne Codierer geeignet sind, um mit einer kleinen Anzahl von Fragen einen hellblauen Codierer oder eine Bewertung von 1200 zu erzielen.

"100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten" in diesem Artikel Wird mit ** Python ** gelöst! Vielen Dank an @ e869120! !! !! !! !! !!

Link zum letzten Artikel

** Alle durchsuchen: Alle auflisten ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 1/22] ** Vollständige Suche: Alle Aufzählungen zur Reduzierung der Anzahl der Straßen durch Ausarbeitung ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part2 / 22] ** Vollständige Suche: Bit vollständige Suche ** [[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil3 / 22]] (https://qiita.com/rudorufu1981/items/74d5f37c26c62fc7a27f) ** Vollständige Suche: Vollständige Suche weiterleiten ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part4 / 22] ** Halbierungssuche ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part5 / 22] ** Suche nach Tiefenpriorität ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part6 / 22] ** Suche nach Breitenpriorität ** [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part7 / 22]

** (Hinzugefügt am 2020/05/07) **

"Teil 3" ~ Bit vollständige Suche ~

Wir werden die folgenden 5 Fragen lösen!

Vollständige Suche: Bit vollständige Suche

10 ALDS_5_A - Ein Round-Robin-Grundproblem. 11 AtCoder Beginner Contest 128 C - Switches 12 AtCoder Anfängerwettbewerb 002 D - Fraktion 13 JOI 2008 Qualifying 5-Osenbei Es ist ein wenig schwierig für den braunen Codierer, aber es wird empfohlen, es zu lösen. 14 Square869120Contest # 4 B - Gebäude sind bunt! Es ist ein schwieriges Problem, das nicht einfach zu lösen ist, aber wenn Sie es lösen, werden Sie definitiv an Stärke gewinnen.

10 ALDS_5_A - Runde

** Wir haben unabhängig die stärkste Vorlage für die vollständige Suche entwickelt! bit = [i>>j&1 for j in range(N)]** Mit dieser Vorlage Egal, was für eine vollständige Suche kommt ** Ich habe vor nichts mehr Angst **

test.py


def I(): return int(input())
def LI(): return list(map(int,input().split()))
n = I()
A = LI()
q = I()
m = LI()
ans = 0
partial_sum = set()
for i in range(2**n):
    bit = [i>>j&1 for j in range(n)] #Stärkste Vorlage
    partial_sum.add(sum([A[k]*bit[k] for k in range(n)]))
for x in m:
    print('yes' if x in partial_sum else 'no')

** (Hinzugefügt am 2020/05/04) **
Eine andere Lösung
Sie können es auch mit ** DFS ** lösen! Es ist, als würde man bis zum Ende suchen, um die nächste Ziffer hinzuzufügen oder nicht! ** Index und Summe setzen **, der Punkt ist, im Stapel zu speichern! !! !!

** ◆ Rekursive Ver **

test.py


def I(): return int(input())
def LI(): return list(map(int,input().split()))
n = I()
A = LI()
q = I()
m = LI()
partial_sum = set()
def dfs(i,_sum):
    if i==n:
        partial_sum.add(_sum)
        return
    dfs(i+1,_sum)
    dfs(i+1,_sum+A[i])
dfs(0,0)
for x in m:
    print('yes' if x in partial_sum else 'no')

** ◆ Stack Ver **

test.py


def I(): return int(input())
def LI(): return list(map(int,input().split()))
n = I()
A = LI()
q = I()
m = LI()
partial_sum = set()
stack = [] #Index und Summe setzen
def dfs():
    stack.append([0,0])
    stack.append([0,A[0]])
    partial_sum.add(A[0])
    while stack:
        i,s = stack.pop()
        i += 1
        if i==n:
            partial_sum.add(s)
            continue
        stack.append([i,s])
        stack.append([i,s+A[i]])
dfs()
for x in m:
    print('yes' if x in partial_sum else 'no')

11 AtCoder Beginner Contest 128 C - Switches Difficulty:807 ** Die stärkste Vorlage für die Vollbit-Suche ist ein großer Erfolg! ** **. Die Problemstellung ist etwas kompliziert, aber ich werde mein Bestes tun, um sie zu verstehen, während ich mir die Eingabe- / Ausgabebeispiele ansehe. Da es maximal 10 Schalter gibt, können Sie anscheinend alle Bits durchsuchen (in Bezug auf die Berechnung)! Wenn Sie eine Richtlinie erstellen können, können Sie dieses Problem lösen! !! !! ** Ich habe vor nichts mehr Angst **

test.py


def LI(): return list(map(int,input().split()))
N,M = LI()
ks = [LI() for _ in range(M)]
p = LI()
ans = 0
for i in range(2**N):
    bit = [i>>j&1 for j in range(N)]
    for k,x in enumerate(ks):
        _,*s = x
        if p[k] != sum([bit[y-1] for y in s])%2:
            break
    else:
        ans += 1
print(ans)

12 AtCoder-Anfängerwettbewerb 002 D - Fraktion

** Schwierigkeit: 1405! !! !! Endlich das Problem der hellblauen Ebene! !! !! ** **. ** Ich konnte es auf den ersten Blick nicht lösen! ** **. Zusätzlich zur Vollbit-Suche ist es möglicherweise einfacher zu lösen, wenn Sie Kenntnisse über ** Diagramme haben. ** **. Die Idee von Graphen hängt auch mit DFS und BFS zusammen, also möchte ich sie beherrschen! !! !!

Denken Sie wie folgt!

  1. Stellen Sie menschliche Beziehungen mit einem ungerichteten Graphen dar.
  2. Befindet sich jedes Mitglied des Landtages in einer Fraktion in einer etwas vollständigen Suche? Denken Sie über alle Möglichkeiten nach, die nicht enthalten sind. Für jeden von 3.2 Kandidaten für Antworten, wenn jeder eine menschliche Beziehung zueinander hat!

test.py


import itertools
def LI(): return list(map(int,input().split()))
N,M = LI()
xy = [LI() for _ in range(M)]
ans = 1
graph = {i:[] for i in range(1,N+1)} #1_indexed
for a in xy:
    x,y = a
    graph[x].append(y)
    graph[y].append(x)
for i in range(2**N):
    bit = [i>>j&1 for j in range(N)]
    giinsuu = sum(bit)
    if giinsuu<=1:
        continue
    giinNO_bit1 = [k+1 for k in range(N) if bit[k]==1]
    for b,c in itertools.product(giinNO_bit1,repeat=2):
        if b==c:
            continue
        if not b in graph[c]:
            break
        if not c in graph[b]:
            break
    else:
        ans = max(ans,giinsuu)
print(ans)

Eine detaillierte Ergänzung zum Code

for b,c in itertools.product(giinNO_bit1,repeat=2):
    if b==c:
        continue
    if not b in graph[c]:
        break
    if not c in graph[b]:
        break
else:
    ans = max(ans,giinsuu)

Vorheriger Artikel zur Verwendung von "itertools.product" und "for / else" [Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Part2 / 22] Da es in kurz erklärt wird, beziehen Sie sich bitte auch darauf ...

Auch das Bild der if-Anweisung ist ein früherer Artikel [Python] ABC133B (Problem mit dem oberen rechten Dreieck) [At Coder] Ein Bild der Berechnung aller "oberen rechten Dreiecke" und "unteren linken Dreiecke" in der Tabelle, die in diesem Artikel erscheint! !! !! Wenn Sie ein Bild dieser Tabelle haben, können Sie es wahrscheinlich sogar codieren!

13 JOI 2008 Qualifying 5-Osenbei

** Ich konnte es auf den ersten Blick nicht lösen! !! Es kann einfacher zu lösen sein, wenn Sie Kenntnisse über Numpy und XOR (exklusive logische Summe^) haben. ** **.

Ich dachte, als ich den AC-Code von erstaunlichen Menschen sah.

Denken Sie wie folgt!

  1. Untersuchen Sie alle Muster zum Umdrehen / Nicht umdrehen aller Zeilen 2.1 Zählen Sie die Anzahl von "1" in jeder Spalte für jedes Muster "(= schwarz)" In 3.2 können wir "0" -Nummer =>, dh "R-Schwarz", versenden. Da kann die Leitung aber auch umgedreht werden Das größere von "R-Schwarz" und "Schwarz"! Der Antwortkandidat ist die Summe aller Ergebnisse in jeder Spalte!

Die Anzahl der "1" in jeder Spalte kann durch Hinzufügen jeder Spalte beantwortet werden. (Das Hinzufügen jeder Spalte ist der 18. von "Numpy"!)

test.py


import numpy as np
def LI(): return list(map(int,input().split()))
R,C = LI()
a = np.array([LI() for _ in range(R)])
ans = 0
for i in range(2**R):
    bit = np.array([[i>>j&1 for j in range(R)]]).T
    black = (a^bit).sum(axis=0)
    ans = max(ans,np.fmax(R-black,black).sum())
print(ans)

Es war ein unerwartet kurzer Code!

Eine detaillierte Ergänzung zum Code

bit = np.array([[i>>j&1 for j in range(R)]]).T

T ist eine Translokation, [Diese Seite] (https://deepage.net/features/numpy-transpose.html) Daher ist es nur dann wirksam, wenn das Ziel der Translokation zwei oder mehr Dimensionen sind! Das Ziel der Translokation ist eindimensional np.array([i>>j&1 for j in range(R)]).T Dann nein.

Verwenden Sie einen der folgenden Schreibstile. Jedem geht es gut!

black = (a^bit).sum(axis=0)

a ^ bit sieht so aus ~ スクリーンショット 2020-05-01 14.10.15.png Wenn Sie "XOR (operator: ^)" mit "1" verwenden, wird es umgedreht! !! !! !! !! Im obigen Beispiel wird nur die oberste Zeile umgedreht! Das Endergebnis bleibt das gleiche! ** Beeindruckend! !! !! !! !! !! ** **.

Addieren Sie jede Spalte, um die Anzahl von "1" in jeder Spalte zu zählen. Das Hinzufügen jeder Spalte kann mit axis = 0 hinzugefügt werden! Für "Achse", Dieser Artikel War leicht zu verstehen!

ans = max(ans,np.fmax(R-black,black).sum())

R-black sieht so aus ~ スクリーンショット 2020-05-01 14.41.21.png In Bezug auf das Bild sind die folgenden zwei gleich!

Für np.fmax, [Diese Seite] (https://note.nkmk.me/python-numpy-maximum-mimimun-fmax-fmin/) War leicht zu verstehen!

** Fazit! Numpy und XOR sind unglaublich! !! !! !! !! !! ** **.

14 Square869120Contest #4 B - Buildings are Colorful! ** Es schien auf den ersten Blick gelöst zu sein, aber ich konnte es nicht lösen! !! !! Es tut mir Leid! ** **. Selbst als "Bit" 0 war, bemerkte ich nicht das Muster, dass die Höhe des Gebäudes "Kijun" zunahm ...

Aber wenn Sie alle Probleme der Bit-Full-Suche bisher verstehen können, ist die Idee selbst nicht so schwierig!

test.py


def LI(): return list(map(int,input().split()))
N,K = LI()
a = LI()
ans = float('INF')
for i in range(2**(N-1)):
    bit = [i>>j&1 for j in range(N-1)]
    if K-1!=sum(bit):
        continue
    cost,kijun = 0,a[0]
    for k in range(N-1):
        if bit[k]==0:
            kijun = max(kijun,a[k+1])
            continue
        if a[k+1]>=kijun+1:
            kijun = a[k+1]
            continue
        cost += (kijun+1)-a[k+1]
        kijun += 1
    ans = min(ans,cost)
print(ans)

Nächstes Mal werde ich die folgenden 3 Fragen lösen!

Vollständige Suche: Vollständige Suche weiterleiten

15 AtCoder Beginner Contest 145 C - Average Length 16 AtCoder Beginner Contest 150 C - Count Order 17 ALDS_13_A-8 Queen Problem ist interessant.

Part3/22 Ende!

Weiter (Teil 4/22)

Recommended Posts

[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 5/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 7/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 4/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 3/22].
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 1/22]
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 6/22]
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (028 - 033 Suche nach Breitenpriorität)
Lösen mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (053 --055 Dynamische Planungsmethode: Andere)
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (024 --027 Suche nach Tiefenprioritäten)
Lösen Sie mit Python [100 ausgewählte Fragen aus der Vergangenheit, die Anfänger und Fortgeschrittene lösen sollten] (015 --017 Vollständige Suche: Vollständige Suche weiterleiten)
Löse mit Python [100 ausgewählte Fragen aus der Vergangenheit, die Anfänger und Fortgeschrittene lösen sollten] (010 --014 Vollständige Suche: Bit vollständige Suche)
Lösen Sie mit Python [100 ausgewählte Fragen aus der Vergangenheit, die Anfänger und Fortgeschrittene lösen sollten] (001 - 004 Alle suchen: Alle Aufzählungen)
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (056 - 059 Problem mit der kürzesten Route: Dyxtra-Methode)
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (034-038 Dynamische Planungsmethode: Knapsack DP basic)
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (039 - 045 Dynamische Planungsmethode: Knapsack DP-Variante)
Lösen Sie mit Python [100 ausgewählte Fragen aus der Vergangenheit, die Anfänger und Fortgeschrittene lösen sollten] (005 --- 009 Alle Suche: Alle Aufzählungen, um die Anzahl der Straßen durch Entwickeln zu reduzieren)
[Für Anfänger von Wettkampfprofis] Ich habe versucht, 40 AOJ "ITP I" -Fragen mit Python zu lösen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Python, das ich Anfängern in der Programmierung empfehlen möchte
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich habe versucht, die Sprachen, die Anfänger von nun an lernen sollten, absichtlich zusammenzufassen
Tohoku University 2020 Early Mathematical Exam (Science) Ich habe versucht, die großen Fragen 1 bis 3 mit Python zu lösen
Django super Einführung von Python-Anfängern! Teil 1 Ich habe versucht, eine HTML-Seite anzuzeigen, auf der nur "Hallo Welt" steht.
Ich habe versucht, Python zu berühren (Installation)
Python-Anfänger versuchten es herauszufinden
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
[Python] Ich habe versucht, Wörter, die für Anfänger schwer zu verstehen sind, auf leicht verständliche Weise zu erklären.
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Django super Einführung von Python-Anfängern! Teil 3 Ich habe versucht, die Vererbungsfunktion für Vorlagendateien zu verwenden
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich wollte ABC160 mit Python lösen
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
Ich habe versucht, Kanas handschriftliche Zeichenerkennung durchzuführen. Teil 2/3 Datenerstellung und Lernen
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
10 Python-Fehler, die Anfängern häufig sind
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)
Ich habe versucht, TSP mit QAOA zu lösen
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
[Markov-Kette] Ich habe versucht, Zitate und negative Emotionen in Python einzulesen.
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich wollte ABC172 mit Python lösen