تبدأ اليوم الجولة التجريبية لبطولة برمجة كأس Yandex . هذا يعني أنه يمكنك استخدام نظام Yandex.Contest لحل المشكلات المشابهة لتلك التي ستكون في جولة التصفيات. حتى الآن ، النتيجة لا تؤثر على شيء.
في المنشور ، ستجد شروط مهام مسار التحليلات والتحليلات ، والتي يتم إخفاؤها عمدًا في المفسدين. يمكنك رؤية الحل أو محاولة القيام بالمهام بنفسك أولاً. يكون الشيك تلقائيًا - ستبلغ المسابقة بالنتيجة فورًا ، وستتاح لك الفرصة لاقتراح حل مختلف.
أ. عد الكذابين في البلاد
حل في المسابقة10000 شخص يعيشون في الولاية. إنهم منقسمون إلى محبين للحقيقة وكذابين. محبو الحقيقة يقولون الحقيقة مع احتمال 80٪ ، والكذابون - بنسبة 40٪. قررت الدولة إحصاء محبي الحقيقة والكذابين بناءً على مسح شمل 100 ساكن. في كل مرة يُسأل شخص تم اختياره عشوائيًا ، "هل أنت كاذب؟" - واكتب الجواب. ومع ذلك ، يمكن لشخص واحد المشاركة في الاستطلاع عدة مرات. إذا كان أحد المقيمين قد شارك بالفعل في الاستطلاع ، فإنه يجيب بنفس الإجابة في المرة الأولى. نعلم أن هناك 70٪ من محبي الحقيقة و 30٪ من الكاذبين. ما هو احتمال أن تقلل الدولة من عدد الكذابين ، أي أن الاستطلاع سيظهر أن هناك أقل من 30٪ من الكذابين؟ اكتب إجابتك بالنسبة المئوية مع وضع نقطة كفاصل ، وقم بتقريب النتيجة لأقرب جزء من مائة (مثال على إدخال: 00.00).
القرار
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.
ب- موسم المسرح والتليفونات
قرر في المسابقةقررت خدمة التذاكر الدولية تقييم الموسم المسرحي. كأحد المقاييس ، يريد مدير المشروع حساب عدد المستخدمين الذين اشتروا تذاكر لأداء مختلف.
عند شراء تذكرة ، يشير المستخدم إلى رقم هاتفه. تحتاج إلى العثور على العرض الذي يحتوي على أكبر عدد من أرقام الهواتف الفريدة. وحساب عدد مطابقة أرقام الهواتف الفريدة.
تنسيق الإدخال
تتوفر سجلات الشراء في ملفTicket_logs.csv. يحتوي العمود الأول على اسم الأداء من قاعدة بيانات الخدمة. في الثانية - رقم الهاتف الذي تركه المستخدم عند الشراء. لاحظ أنه من أجل التآمر ، تم استبدال رموز الهاتف بالدولة بمناطق غير مخدومة حاليًا.
تنسيق الإخراج
عدد الأرقام الفريدة.
القرار
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. حساب pFound
حل في مسابقةوأرشيفيحتوي على ثلاثة ملفات نصية:
- qid_query.tsv - معرف الاستعلام ونص الاستعلام ، مفصولة بعلامات تبويب ؛
- qid_url_rating.tsv - معرف الطلب ، عنوان URL للمستند ، صلة الوثيقة بالطلب ؛
- hostid_url.tsv - معرف المضيف و URL المستند.
من الضروري عرض نص الطلب بأقصى قيمة لمقياس pFound ، محسوبًا من أهم 10 مستندات. يتكون الإصدار عند الطلب وفق القواعد التالية:
- من مضيف واحد يمكن أن يكون هناك مستند واحد فقط في المشكلة. إذا كان هناك عدة مستندات للطلب بنفس معرف المضيف ، فسيتم أخذ المستند الأكثر صلة (وإذا كانت هناك عدة مستندات هي الأكثر صلة ، فسيتم أخذ أي منها).
- يتم فرز المستندات عند الطلب بترتيب تنازلي من حيث الصلة.
- إذا كانت هناك عدة مستندات من مضيفين مختلفين لها نفس الصلة ، فقد يكون ترتيبها عشوائيًا.
معادلة حساب pFound:
pFound =pLook [i] ⋅ pRel [i]
pLook [1] = 1
pLook [i] = pLook [i - 1] ⋅ (1 - pRel [i - 1]) ⋅ (1 - pBreak)
pBreak = 0.15
تنسيق الإخراج
نص الطلب بأقصى قيمة للمقياس. على سبيل المثال ، بالنسبة لـ open_task.zip ، فإن الإجابة الصحيحة هي:
القرار
. - — 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]د- البطولة الرياضية
حل في المسابقة| المهلة الزمنية للاختبار | 2 ثانية |
| حد الذاكرة لكل اختبار | 256 ميجا بايت |
| إدخال | الإدخال القياسي أو input.txt |
| انتاج | | الإخراج القياسي أو الإخراج. txt |
صيغة إدخال
يحتوي السطر الأول عدد صحيح 3 ≤ ≤ ن 2 16 - 1 ن = 2 ك - 1 - عدد المباريات السابقة. تحتوي الأسطر n التالية على ألقاب اللاعبين (بأحرف لاتينية كبيرة) مفصولة بمسافة. أسماء اللاعبين مختلفة. جميع الألقاب فريدة من نوعها ، ولا توجد أسماء بين الزملاء.
تنسيق الإدخال
اطبع "NO SOLUTION" (بدون علامات اقتباس) إذا كان Masha قد حفظ الألعاب بشكل غير صحيح وكان من المستحيل الحصول على دورة وفقًا للنظام الأولمبي على هذه الشبكة. إذا كانت شبكة البطولة ممكنة ، فقم بطباعة لقبين على سطر واحد - أسماء المرشحين للمركز الأول (الترتيب غير مهم).
مثال 1
| إدخال | انتاج | |
7
|
IURKOVSKII GORBOVSKII |
| إدخال | انتاج | |
3
|
NO SOLUTION |
النظام الأولمبي ، المعروف أيضًا باسم التصفيات ، هو نظام تنظيم منافسة يتم فيه إقصاء أحد المنافسين من البطولة بعد الخسارة الأولى. يمكنك قراءة المزيد عن النظام الأولمبي على ويكيبيديا .
مخطط الاختبار الأول من الشرط:
القرار
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()لحل مشاكل المسارات الأخرى للبطولة ، عليك التسجيل هنا .