X



トップページ数学
1002コメント417KB
分からない問題はここに書いてね448
■ このスレッドは過去ログ倉庫に格納されています
0195132人目の素数さん
垢版 |
2018/10/28(日) 20:31:26.72ID:x624ZJMX
>>194
続き

部屋が縦m、横nで、A君は横1行を探し終えたらすぐ下の1行に移り、
B君は縦1列を探し終えたらすぐ右の1列に移るという場合を考える。
つまり、m=4,n=3の場合、A君は
0123
4567
891011
B君は
0369
14710
25811
という順番で探す。
このとき、σ=0,3,6,9,1,4,7,10,2,5,8,11。
一般には、σ(nk+l)=ml+k (0≦k≦m-1, 0≦l≦n-1)。

ここまでをPythonで表すと:
#二項係数。SageMathでは定義ずみ
def binomial(n,r):
from math import factorial as f
return f(n)//f(r)//f(n-r) if r>=0 and n-r>=0 else 0

#置換p、宝c個で勝つ宝の配置の数
def nwinperm(p,c):
N = len(p)
return sum(binomial(len([j for j in range(i+1, N) if i<p[j]]),c-1)
for i in range(N) if i<p[i])

#部屋が縦m、横nのときの置換
def rectperm(m,n):
return [m*l+k for k in range(m) for l in range(n)]

#部屋が縦m、横n、宝がc個で横優先が勝つ宝の配置の数
def nwinrect0(m,n,c):
return nwinperm(rectperm(m,n),c)

続く
0196132人目の素数さん
垢版 |
2018/10/28(日) 20:32:10.70ID:x624ZJMX
>>195
続き

部屋が縦m、横nの場合を考えているが、もう少し計算を進める。
#{j| j>i, σ(j)>i} をこの場合に具体的に表そう。

i,j (0≦i,j≦mn-1)をそれぞれ nk+l, nk'+l' (0≦k,k'≦m-1, 0≦l,l'≦n-1) とする。
σ(i)>i ⇔ lm+k>nk+l ⇔ (m-1)l>(n-1)k、
j>i ⇔ nk+l>nk'+l' ⇔ 「k=k' かつ l<l'」または「k<k'」、
σ(j)>i ⇔ l'm+k'>nk+l ⇔ l' + k'/m > (nk+l)/m [ここで nk+lをmで割った商をq、余りをrとすると]
   ⇔ l' + k'/m > q + r/m ⇔ 「q≦l'≦n-1 ただし l'=q, k'≦r を除く」
を使って
#{j| j>i, σ(j)>i} = #{(k',l')|『「k=k' かつ l<l'」または「k<k'」』かつ l'm+k'>nk+l}
に出てくる『「k=k' かつ l<l'」または「k<k'」』かつ l'm+k'>nk+lを満たす組(k',l')の数を求める。
k=k' かつ l<l'のとき σ(i)>iからlm+k>nk+lだからl'm+k'>nk+lは常に成り立つので、l<l'≦n-1でn-1-l個。
k<k' のとき l'm+k'>nk+l ⇔ 「q≦l'≦n-1, k<k'≦m-1 ただし l'=q, k<k'≦r を除く」だから
(n-q)(m-1-k) - (r-k)δ(r>k)個、ただしδ(P)はPが真なら1、偽なら0である関数。
よって、#{j| j>i, σ(j)>i} = (n-1-l) + (n-q)(m-1-k) - (r-k)δ(r>k)。
したがって、求める数は
Σ[0≦k≦m-1, 0≦l≦n-1, (m-1)l>(n-1)k] binomial((n-1-l) + (n-q)(m-1-k) - (r-k)δ(r>k), c-1)。

これを使ったPythonコード:
#nloc(m,n,k,l)は縦m、横nの部屋で横優先が部屋(k,l)で初めて宝を発見する場合で
#宝が置かれても縦優先に先を越されない部屋の数。
def nloc(m,n,k,l):
q,r = divmod(n*k+l,m)
return (n-1-l) + (n-q)*(m-1-k) - (r-k if r > k else 0)

#部屋が縦m、横n、宝がc個で横優先が勝つ宝の配置の数
def nwinrect1(m,n,c):
return sum(binomial(nloc(m,n,k,l),c-1) for k in range(m) for l in range(n) if (m-1)*l>(n-1)*k)

続く
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況