首先這是個玄學的題目,很多人想到了楊輝三角,但是我太菜了於是沒有想到,用了另一種方法得出了正確的式子,先寫下式子好了。
求n維下m維的數量:
a ns
=cnm
×2n−
mans=c_n^m\times 2^
ans=cn
m×2
n−m我這個蒟蒻推了一節數學課才推出的結論
先來點簡單的
我們生活在3維世界,很難想象出4維或4維以上世界是什麼樣的,但我們知道,2維可以用xy座標表示,3維可以用xyz座標表示,那n維就可以用n個數表示座標,n維體就是由一些座標構成的圖形,那麼座標的數量就是0維的數量。
舉個例子,二維可以表示4個座標,分別是(0,
0),(
0,1)
,(1,
0),(
1,1)
(0,0),(0,1),(1,0),(1,1)
(0,0),
(0,1
),(1
,0),
(1,1
),三維就是(0,
0,0)
,(0,
0,1)
,(0,
1,0)
,……,
(1,1
,0),
(1,1
,1
)(0,0,0),(0,0,1),(0,1,0),……,(1,1,0),(1,1,1)
(0,0,0
),(0
,0,1
),(0
,1,0
),……
,(1,
1,0)
,(1,
1,1)
,四維就是(0,
0,0,
0)
(0,0,0,0)
(0,0,0
,0)等編者好懶,不難發現,每個座標只有0,1
0,10,
1兩種,很容易想出n
nn維里0
00維的個數,就是2
n2^n
2n當然如果a>=b就需要特判了啊
開始正文
觀察座標,以3
33維為例,他的1
11維怎麼表示呢?很容易想到,如果兩個點的座標中只有乙個不相同的數,那麼這兩個座標間可以連一條1
11維的線。
二維呢?還是考慮連線,所以想表示乙個2
22維怎麼做?那就是連線對角線!
乙個對角線一定能對應乙個且僅乙個2
22維圖形。對角線兩個端點的座標的性質,是有兩個數不同:原因很簡單,舉個例子,左上到右下,有2
22個不同因素:左右,上下;那麼三維可以考慮出就多了個前後,從而推出m維就有m個因素。
那麼對於n
nn維圖形,從2
n2^n
2n個點出發可以尋找像這樣可以表示乙個m
mm維圖形的線段。
於是轉化並簡化問題:從座標角度想,你有乙個n
nn個0
00組成的排列,問有多少含有n
nn個數且有m
mm個1
11和n−m
n-mn−
m個00
0的排列。
輕鬆得出
a ns
=cnm
×2
nans=c^m_n\times 2^n
ans=cn
m×2
n 誒怎麼和上面的式子不太一樣
然後就產生疑問了,2
22維圖形可以右下−
-−左上,左上−
-−右下,右上−
-−左下,左下−
-−右上,同乙個二維圖形重複計算4
44次!那麼我們考慮下,n
nn維下的m
mm維會重複計算多少次,考慮m=3
m=3m=
3,從整個三維圖形的每個點都可以向對應點發射線段,乙個三維圖形被重複了2
32^3
23次(也就是三維的點的個數次),考慮2
22維,也是從每個點數到對面都有一條線,重複2
22^2
22次,推理出m
mm維時,這個操作將重複2
m2^m
2m次,從而得出最終的式子:
a ns
=cnm
×2n−
mans=c_n^m\times 2^
ans=cn
m×2
n−m至於求cnm
c^m_n
cnm
需要的逆元這裡不多說了,很多大佬寫過求逆元的部落格,有事問度娘。
這是第一次寫題解所以可能有點囉嗦,見諒
#include
#include
#include
typedef
long
long ll;
ll ans,a,b,inv[
10000001];
const ll mod=
1000000007
;using
namespace std;
intq_pow
(ll a,ll b)
return an;
}int
main()
ans=
q_pow(2
,a-b)
; inv[1]
=1;for
(ll i=
2;i<=
100000
;i++
)for
(int i=
1;i<=b;i++
)printf
("%d"
,ans)
;}
洛谷P1999 高維正方體
這題挺有意思的 考慮起來有點麻煩 首先 n 維空間的點數 為 2 n 因為每往外延伸一條邊 就多出兩個點 然後考慮遞推 設 f 表示 i 維空間內 含有 j 維空間的個數 從 3 維空間開始推 f 8 因為 2 3 8 前面已經得出了 f 12 因為每個點可以延伸出 3 條邊 每條邊連著 2 個點 ...
洛谷P1999三國遊戲
題目 仔細想想,兩方都拿不到每個武將的配對中最大的 本來想的是如果有武將a,b,對應最大ma,mb,次大ca,cb,那麼自己選了a,電腦選了mb,接下來自己選b,若mb但仔細一想,這樣還不如第二步去選ca.所以自己只要設計一下,選到次大武將中最大的一組,就必勝了。如下 include include...
洛谷 P1387 最大正方形
題目描述 在乙個n m的只包含0和1的矩陣裡找出乙個不包含0的最大正方形,輸出邊長。輸入輸出格式 輸入格式 輸入檔案第一行為兩個整數n,m 1 n,m 100 接下來n行,每行m個數字,用空格隔開,0或1.輸出格式 乙個整數,最大正方形的邊長 輸入輸出樣例 輸入樣例 1 4 4 0 1 1 1 1 ...