Bir mayın tarlası kibar yakın görüşlü sarhoş Bot


11

Başlıktan da anlaşılacağı gibi, bu sorun @NP'den Kibar Görüşlü Sarhoş Botundan yarı esinlenmiştir.

Zavallı botumuz başlangıçta kartezyen bir ızgaraya yerleştirilir ve her dakikadan sonra dört birimden birinde (Yukarı, Aşağı, Sol, Sağ) 1 birim hareket eder.

N dakika sonra , ızgaradaki gizli mayınların tümü etkinleşir ve üzerlerinde kendilerini bulabilecek kötü botları öldürür. Madenler, | y | = | x | denklemini sağlayan tüm tamsayı koordinatlarında bulunur.

Meydan okuma

Sen sağlanacaktır n girdi olarak, mayınlar patlamadan önce, dakika sayısını ve bot olduğunu bir çıkışı olarak, sen olasılığını bulmak zorundadır ölü .

Girdi : n'yi temsil eden doğal bir sayı .

Çıktı : Botun ölü olma olasılığı p / q olsun, burada p ve q nispeten tam sayıdır (q 0 olamaz, ancak p olabilir). Çıktı s.

kurallar

  • Kişisel algoritma olmamalıdır üstel veya daha yüksek sürede çalıştırın. İdeal olarak polinom veya daha az zamanda çalışması gerekir.
  • Algoritmanız n<20 girişleri (çok zorsa ayarlanabilir) makul bir sürede işleyebilmelidir .
  • Bu bir mücadelesi.
  • Belirli bir n için tüm olasılıkları yinelemek kesinlikle bir cevap olarak kabul edilmeyecektir.

Test Durumları

1->0

2->3

4->39

6->135

8->7735

10->28287

N = 6 için Örnek Hesaplama

4 olası hamlemiz var: U, D, R ve L. Gidilebilecek toplam yol sayısı 4 ^ 6 veya 4096'dır. Y = x: x, y = hattı boyunca inen 4 olası durum vardır. ± 1; x, y = ± 2; x, y = ± 3; veya x = y = 0. (1,1), (2,2) ve (3,3) 'te bitirme yollarının sayısını sayacağız, diğer çeyrekleri hesaba katmak için bunları 4 ile çarpacağız ve bunu (0,0) ile biten yol sayısına kadar.

Durum 1: Bot (3, 3) ile bitiyor. Botun burada bitmesi için 3 doğru hamle ve 3 yukarı hamle yapmış olması gerekir. Başka bir deyişle, buraya ulaşmanın toplam yolu, RRRUUU dizisindeki harfleri yeniden düzenlemenin yoludur; 6, 3 = 20'yi seçer.

Durum 2: Bot (2,2) ile bitiyor. Botun burada bitmesi için 2 yukarı hamle, 3 sağ hamle ve 1 sol hamle yapmış olabilir; veya 2 sağ hamle, 3 yukarı hamle ve 1 aşağı hamle. Böylece, buraya ulaşmanın toplam yol sayısı, her ikisi de (6 seçim 1) * (5 seçim 2) = 60 olmak üzere RRRLUU ve UUUDRR dizilerindeki harfleri yeniden düzenleme yollarının toplamıdır. .

Durum 3: Bot (1,1) ile bitiyor. Botun burada bitmesi için, 1 sağ hareket, 3 yukarı hareket ve 2 aşağı hareket olabilirdi. Bu durumda, RUUUDD dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 1) * (5 seçim 2) = 60'tır.

1 yukarı hareket, 3 sağ hareket ve 2 sol hareket. Bu durumda, URRRLL dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 1) * (5 seçim 2) = 60'tır.

2 sağ hamle, 1 sola hamle, 2 yukarı hamle ve 1 aşağı hamle. Bu durumda, UUDRRL dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 1) * (5 seçim 1) * (4 seçim 2) = 180'dir.

Böylece, (1,1) 'e ulaşmanın toplam yol sayısı 300'dür.

Durum 4: Bot (0,0) ile bitiyor. Botun burada sona ermesi için:

3 sağ hareket ve 3 sol hareket. Bu durumda, RRRLLL dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 3) = 20'dir.

3 yukarı ve 3 aşağı hareket. Bu durumda, UUUDDD dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 3) = 20'dir.

1 sağ hareket, 1 sol hareket, 2 yukarı hareket ve 2 aşağı hareket. Bu durumda, RLUUDD dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 1) * (5 seçim 1) * (4 seçim 2) = 180'dir.

1 yukarı hareket, 1 aşağı hareket, 2 sağ hareket ve 2 sol hareket. Bu durumda, RRLLUD dizisindeki harfleri yeniden düzenlemenin yolu (6 seçim 1) * (5 seçim 1) * (4 seçim 2) = 180'dir.

Böylece, (0,0) 'a ulaşmanın toplam yol sayısı 400'dür.

Bu vakaları bir araya getirerek, | y | = | x | 4 (20 + 120 + 300) + 400 = 2160'dır. Böylece, olasılığımız 2160/4096'dır. Bu fraksiyon tamamen azaldığında, 135/256, yani cevabımız 135 .


Ben meydan okumayı seviyorum ama çok küçük test durumlarından biri (2 veya 3) için çalışılmış bir örnek eklemek yararlı olacağını düşünüyorum.
Bay Xcoder

@ Mr.Xcoder Zamanım olduğunda bir tane ekleyeceğim.
Don Bin

2
İlginç bir meydan okuma. Bir kuralda "ideal" kelimesini kullanmanın bir kural olmadığını unutmayın. Kesinlikle öyle ya da böyle söylemek faydalı olacaktır.
trichoplax

1
Ama hiç kimse Birinci Nesil Öğrenme Algoritması'ndan bahsetmiyor mu?
Redwolf Programları

1
@RedwolfPrograms ahaha yea ama bu botun daha soğuk bir adı var
Don Bin

Yanıtlar:


17

Python 2 , 65 bayt

def p(n):b=2**n;r=b*b-((~b)**n/b**(n/2)%-b)**2;print~n%2*r/(r&-r)

Çevrimiçi deneyin!

Botun ölme olasılığı şu şekilde ifade edilebilir:

f(n)=2ss2, where s=12n(nn/2)

0n/2

y=xnn/2n(nn/2)2n

s=12n(nn/2)

y=xs2sx=y=0

x=y=0s2x=yx=y

x=yx=y2ss2

(nn/2)(b+1)**n/b**(n/2)%bb=2**nr/(r&-r)rr&-r

2ss21(1s)2s1/2nn


Botun ölme olasılığının kanıtını yazdıktan sonra, kanıtlamak ve sunmak için muhtemelen daha temiz bir yol buldum.

a=x+yb=xyab

±1a±1bbirb

x=yx=-ybir=0b=0bir=0s=12n(nn/2)b=0bir0b0(1-s)21-(1-s)2


3
Fantastik! Birinin bunu türetmesini bekliyordum. Çok hızlı olduğunu düşünmemiştim. Dezavantajı, diğer cevapların çoğunun çok fazla düşünmek zorunda kalmayacağıdır :(. Mükemmel +1
Don Bin

küçük ödül tadını çıkarın (çok üzgünüm vermek için çok şey yok)
Don Bin

1
@RushabhMehta Teşekkür ederim, çok naziksiniz! Ödülün beni daha sonra düşündüğüm daha temiz bir kanıt yazmaya motive etti.
xnor

Eğer kontrol etmek isterseniz, bu sorunun asıl ilham kaynağı AIME I 2014 problem 11 idi.
Don Bin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.