Die Testrunde der Yandex Cup Programmiermeisterschaft beginnt heute . Dies bedeutet, dass Sie das Yandex.Contest-System verwenden können, um Probleme zu lösen, die denen in der Qualifikationsrunde Àhneln. Bisher hat das Ergebnis keinen Einfluss.
In der Post finden Sie die Bedingungen fĂŒr die Aufgaben des Analytics Track und der Analysen, die bewusst in Spoilern versteckt sind. Sie können die Lösung sehen oder versuchen, die Aufgaben zuerst selbst zu erledigen. Die ĂberprĂŒfung erfolgt automatisch - der Wettbewerb meldet sofort das Ergebnis und Sie haben die Möglichkeit, eine andere Lösung vorzuschlagen.
A. ZĂ€hlen Sie die LĂŒgner im Land
Löse im Wettbewerb10.000 Menschen leben im Staat. Sie sind unterteilt in Liebhaber der Wahrheit und LĂŒgner. Wahrheitsliebhaber sagen die Wahrheit mit einer Wahrscheinlichkeit von 80% und LĂŒgner mit einer Wahrscheinlichkeit von 40%. Der Staat beschloss, die Wahrheitsliebhaber und LĂŒgner anhand einer Umfrage unter 100 Einwohnern zu zĂ€hlen. Jedes Mal, wenn eine zufĂ€llig ausgewĂ€hlte Person gefragt wird: "Sind Sie ein LĂŒgner?" - und schreibe die Antwort auf. Eine Person kann jedoch mehrmals an der Umfrage teilnehmen. Wenn ein Bewohner bereits an der Umfrage teilgenommen hat, antwortet er genauso wie beim ersten Mal. Wir wissen, dass es 70% der Wahrheitsliebhaber und 30% der LĂŒgner gibt. Wie hoch ist die Wahrscheinlichkeit, dass der Staat die Anzahl der LĂŒgner unterschĂ€tzt, dh eine Umfrage zeigt, dass es weniger als 30% der LĂŒgner gibt? Geben Sie Ihre Antwort in Prozent mit einem Punkt als Trennzeichen ein und runden Sie das Ergebnis auf das nĂ€chste Hundertstel (Beispiel fĂŒr die Eingabe: 00.00).
Entscheidung
1. «» « ?».
«, » «» «» .
«, » :
: «» * = 0,2 * 0,7.
: «» * ( â ) + «» * ( ) = «» * = 0,2 * 0,7.
«, » 0,14 , . .
, «, » : 0,2 * 0,7 + 0,4 * 0,3 = 0,26.
2. .
, , â n = 100, p = 0,26.
, 30 (30% 100 ): P (x < 30). n = 100, p = 0,26 0,789458. : stattrek.com/online-calculator/binomial.aspx.
, : 78,95.
«, » «» «» .
«, » :
: «» * = 0,2 * 0,7.
: «» * ( â ) + «» * ( ) = «» * = 0,2 * 0,7.
«, » 0,14 , . .
, «, » : 0,2 * 0,7 + 0,4 * 0,3 = 0,26.
2. .
, , â n = 100, p = 0,26.
, 30 (30% 100 ): P (x < 30). n = 100, p = 0,26 0,789458. : stattrek.com/online-calculator/binomial.aspx.
, : 78,95.
B. Theatersaison und Telefone
Entscheiden Sie sich fĂŒr einen Wettbewerb Derinternationale Ticketservice hat beschlossen, eine Bestandsaufnahme der Theatersaison vorzunehmen. Als eine der Metriken möchte der Projektmanager die Anzahl der Benutzer zĂ€hlen, die Tickets fĂŒr verschiedene Vorstellungen gekauft haben.
Beim Kauf eines Tickets gibt der Benutzer seine Telefonnummer an. Sie mĂŒssen die Show mit der gröĂten Anzahl eindeutiger Telefonnummern finden. Und zĂ€hlen Sie die Anzahl der ĂŒbereinstimmenden eindeutigen Telefonnummern.
EingabeformatKaufprotokolle
sind in der Dateiticket_logs.csvverfĂŒgbar. Die erste Spalte enthĂ€lt den Namen der Leistung aus der Servicedatenbank. Im zweiten - die Telefonnummer, die der Benutzer beim Kauf hinterlassen hat. Beachten Sie, dass aus GrĂŒnden der Verschwörung die Telefon-LĂ€ndercodes durch derzeit nicht versorgte Zonen ersetzt wurden.
Ausgabeformat
Die Anzahl der eindeutigen Nummern.
Entscheidung
main.py.
. . 801â807.
:
1. 8-(801)-111-11-11
2. 8-801-111-11-11
3. 8801-111-11-11
4. 8-8011111111
5. +88011111111
6. 8-801-flowers, â ( )
:
1. 1â4 replace.
2. 5 , 1. 11 , .
3. 6 , . , .
, . .
. . 801â807.
:
1. 8-(801)-111-11-11
2. 8-801-111-11-11
3. 8801-111-11-11
4. 8-8011111111
5. +88011111111
6. 8-801-flowers, â ( )
:
1. 1â4 replace.
2. 5 , 1. 11 , .
3. 6 , . , .
, . .
C. Berechnen Sie pFound
Im Wettbewerb lösenDasArchiventhÀlt drei Textdateien:
- qid_query.tsv - die ID der Abfrage und der Text der Abfrage, getrennt durch Tabulatoren;
- qid_url_rating.tsv - Anforderungs-ID, Dokument-URL, Dokumentrelevanz fĂŒr die Anforderung;
- hostid_url.tsv - Host-ID und Dokument-URL.
Es ist erforderlich, den Anforderungstext mit dem Maximalwert der pFound-Metrik anzuzeigen, der aus den Top-10-Dokumenten berechnet wird. Die Ausstellung erfolgt auf Anfrage nach folgenden Regeln:
- Von einem Host kann nur ein Dokument ausgestellt werden. Wenn fĂŒr die Anforderung mehrere Dokumente mit derselben Host-ID vorhanden sind, wird das relevanteste Dokument verwendet (und wenn mehrere Dokumente am relevantesten sind, wird eines verwendet).
- Dokumente auf Anfrage werden in absteigender Reihenfolge ihrer Relevanz sortiert.
- Wenn mehrere Dokumente von verschiedenen Hosts dieselbe Relevanz haben, kann ihre Reihenfolge beliebig sein.
Formel zur Berechnung von pFound:
pFound =pLook [i] â pRel [i]
pLook [1] = 1
pLook [i] = pLook [i - 1] â (1 - pRel [i - 1]) â (1 - pBreak)
pBreak = 0,15
Ausgabeformat
Der Anforderungstext mit dem maximalen Metrikwert. FĂŒr open_task.zip lautet die richtige Antwort beispielsweise:
Entscheidung
. - â pFound . pandas â .
import pandas as pd
#
qid_query = pd.read_csv("hidden_task/qid_query.tsv", sep="\t", names=["qid", "query"])
qid_url_rating = pd.read_csv("hidden_task/qid_url_rating.tsv", sep="\t", names=["qid", "url", "rating"])
hostid_url = pd.read_csv("hidden_task/hostid_url.tsv", sep="\t", names=["hostid", "url"])
# join , url
qid_url_rating_hostid = pd.merge(qid_url_rating, hostid_url, on="url")
def plook(ind, rels):
if ind == 0:
return 1
return plook(ind-1, rels)*(1-rels[ind-1])*(1-0.15)
def pfound(group):
max_by_host = group.groupby("hostid")["rating"].max() #
top10 = max_by_host.sort_values(ascending=False)[:10] # -10
pfound = 0
for ind, val in enumerate(top10):
pfound += val*plook(ind, top10.values)
return pfound
qid_pfound = qid_url_rating_hostid.groupby('qid').apply(pfound) # qid pfound
qid_max = qid_pfound.idxmax() # qid pfound
qid_query[qid_query["qid"] == qid_max]D. Sportturnier
Löse im Wettbewerb| Zeitlimit fĂŒr den Test | 2 Sek |
| Speicherlimit pro Test | 256 MB |
| Eingang | Standardeingabe oder input.txt |
| Ausgabe | Standardausgabe oder output.txt |
Eingabeformat
Die erste Zeile enthĂ€lt eine ganze Zahl 3 †n †2 16 - 1, n = 2 k - 1 - die Anzahl der vergangenen Spiele. Die nĂ€chsten n Zeilen enthalten zwei Nachnamen der Spieler (in lateinischen GroĂbuchstaben), die durch ein Leerzeichen getrennt sind. Die Namen der Spieler sind unterschiedlich. Alle Nachnamen sind eindeutig, es gibt keine Namensvetter unter Kollegen.
Eingabeformat
Geben Sie "NO SOLUTION" (ohne AnfĂŒhrungszeichen) aus, wenn Masha die Spiele falsch gespeichert hat und es unmöglich ist, ein Turnier gemÀà dem olympischen System in dieser Tabelle zu erhalten. Wenn das Turnierraster möglich ist, drucken Sie zwei Nachnamen in eine Zeile - die Namen der Kandidaten fĂŒr den ersten Platz (die Reihenfolge ist nicht wichtig).
Beispiel 1
| Eingang | Ausgabe |
7
|
IURKOVSKII GORBOVSKII |
| Eingang | Ausgabe |
3
|
NO SOLUTION |
olympische System, auch als Playoffs bekannt, ist ein Organisationssystem fĂŒr Wettbewerbe, bei dem ein Teilnehmer nach der ersten Niederlage aus einem Turnier ausgeschieden ist. Sie können mehr ĂŒber das olympische System auf Wikipedia lesen .
Schema des ersten Tests aus der Bedingung:
Entscheidung
n = 2^k â 1 k. , i- , n_i. , ( k ). , . , i j min(n_i, n_j), - ( ). r (i, j), min(n_i, n_j) = r. :
. 2^k â 1 , :
1. .
2. r 2^{k â r}.
. : , . k. k = 1 â . k â 1 -> k.
-, , . , q . , q- . , 1, 2, ..., q. , , , , 2^k. , 2^{k â 1} n_i = 1. .
, 2^{k â 1} n_i > 1 â . , n_i = 1 2^{k â 1}, . , : n_i = 1, â n_i > 1. k â 1 ( n_i 1). , .
. 2^k â 1 , :
1. .
2. r 2^{k â r}.
. : , . k. k = 1 â . k â 1 -> k.
-, , . , q . , q- . , 1, 2, ..., q. , , , , 2^k. , 2^{k â 1} n_i = 1. .
, 2^{k â 1} n_i > 1 â . , n_i = 1 2^{k â 1}, . , : n_i = 1, â n_i > 1. k â 1 ( n_i 1). , .
import sys
import collections
def solve(fname):
games = []
for it, line in enumerate(open(fname)):
line = line.strip()
if not line:
continue
if it == 0:
n_games = int(line)
n_rounds = n_games.bit_length()
else:
games.append(line.split())
gamer2games_cnt = collections.Counter()
rounds = [[] for _ in range(n_rounds + 1)]
for game in games:
gamer_1, gamer_2 = game
gamer2games_cnt[gamer_1] += 1
gamer2games_cnt[gamer_2] += 1
ok = True
for game in games:
gamer_1, gamer_2 = game
game_round = min(gamer2games_cnt[gamer_1], gamer2games_cnt[gamer_2])
if game_round > n_rounds:
ok = False
break
rounds[game_round].append(game)
finalists = list((gamer for gamer, games_cnt in gamer2games_cnt.items() if games_cnt == n_rounds))
for cur_round in range(1, n_rounds):
if len(rounds[cur_round]) != pow(2, n_rounds - cur_round):
ok = False
break
cur_round_gamers = set()
for gamer_1, gamer_2 in rounds[cur_round]:
if gamer_1 in cur_round_gamers or gamer_2 in cur_round_gamers:
ok = False
break
cur_round_gamers.add(gamer_1)
cur_round_gamers.add(gamer_2)
print ' '.join(finalists) if ok else 'NO SOLUTION'
def main():
solve('input.txt')
if name == '__main__':
main()Um die Probleme anderer Strecken der Meisterschaft zu lösen, mĂŒssen Sie sich hier registrieren .