Hallo, liebe Chabrowiten. Eine Artikelserie enthält eine Diskussion der Aufgaben, die in der achten Klasse im Informatikunterricht am Tscheljabinsker Physik- und Mathematik-Lyzeum Nr. 31 gestellt werden. Ein bisschen Geschichte ... Unser Lyzeum ist eine der stärksten Bildungseinrichtungen in Russland. Sie belegt den 5. Platz in der Rangliste der Wettbewerbsfähigkeit von Absolventen und verliert gegen Schulen in Moskau und St. Petersburg. Die SchĂźler gewinnen regelmäĂig Wettbewerbe auf nationaler und internationaler Ebene.
Dieser Artikel enthält keine Theorie und enthält nur Methoden zur LÜsung von Problemen. Details zur Bin-Suche werden hier beschrieben.
Kommen wir also zu den Aufgaben. Diese Aufgaben umfassen die Verwendung der binären Suche, einschlieĂlich der bin-Suche nach Antworten. Wie wir wissen, ist die Bin-Suche ein Algorithmus zum Suchen nach Objekten anhand eines bestimmten Attributs in einer Reihe von Objekten. Wir beantragen Listen, die in aufsteigender / absteigender Reihenfolge sortiert sind. Nur 4 Aufgaben, von denen 2 darauf abzielen, den "Algorithmus ohne Rosinen" anzuwenden.
Bei dieser Aufgabe mßssen Sie zuerst die Länge der ersten und zweiten Zeile berßcksichtigen und dann jede nächste Zeile in eine Liste schreiben. Nachdem wir jedes Element der zweiten Liste genommen haben, suchen wir nach dem rechten und linken Rand dafßr. MÜglicherweise stellen Sie fest, dass die Gesamtwerte des linken und des rechten Randes in der linken und rechten Bin-Suche gleich sind, wenn die Nummer nicht in der Liste enthalten ist.
n, m = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) for x in b: left = -1 right = len(a)
Hier ist dieses Puzzle mit einer Wendung! Hier ist es notwendig, die Suche so zu transformieren, dass sie auch fĂźr Zahlen durchgefĂźhrt wird, die nicht in der Liste fĂźr die Suche enthalten sind. Hier suchen wir auch nach der Mitte in der âGrenzlisteâ. Wenn das Element in der Mitte mit der Zahl verglichen wird, schreiben wir den mittleren Index + 1 (dh die letzte Mitte nicht in die Grenzliste aufnehmen) an den linken Rand (der Index). Andernfalls schreiben wir am rechten Rand den mittleren Index. Wir machen das alles, während der linke Rand kleiner als der rechte ist. Nachdem wir links und rechts gefunden haben, betrachten wir den Fall, in dem die Zahl nicht in der Liste enthalten ist und der Abstand nach links kleiner oder gleich dem nach rechts ist. Daher leiten wir ein [left - 1] ab, andernfalls ein [left].
n, m = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) for x in b: left = 0 right = n - 1 while left < right: middle = (left + right) // 2 if a[middle] < x: left = middle + 1 else: right = middle if left > 0 and a[left] != x and abs(a[left - 1] - x) <= abs(a[left] - x): print(a[left - 1]) else: print(a[left])
Tadam! Die Aufgabe der binären Suche nach Antwort. Zunächst verbinden wir aus der Mathematikbibliothek die Funktion sqrt, die die Quadratwurzel berechnet. Danach definieren wir 0 fßr den linken Rand und 1e10 fßr den rechten Rand, dh 10 Milliarden, basierend auf den in der Bedingung angegebenen Einschränkungen. Als nächstes suchen wir, wie bei einer typischen Bin-Suche, nach der Mitte, später vergleichen wir. Aber was ist interessant? Hier ist Mitte x in der Gleichung. In Anbetracht dessen bestimmen wir den Wert der Gleichung und vergleichen ihn mit der realen Antwort (d. H. C). Nun, wir verschieben die Grenzen, bis der Unterschied in den Grenzen kleiner oder gleich 10 Milliarden ist. Dies ist die Genauigkeit der Messung. Später multiplizieren wir mit einer Million, runden ab, ßbersetzen in int und reale Division durch dieselbe Million.
from math import sqrt c = float(input()) left = 0 right = 1e10
Es gibt bereits eine Analyse fßr diese Aufgabe, daher werde ich nur den Code anhängen.
n, x, y = map(int, input().split()) min1 = min(x, y) if n == 1: print(min1) else: left = 0 right = n * (x + y - min1 + 1) while right - left > 1: middle = (right + left) // 2 if n - 1 <= middle // x + middle // y: right = middle else: left = middle print(min1 + left + 1)
Um das Material zu konsolidieren, kĂśnnen Sie hier Probleme lĂśsen.