暑假NOIP筆記—July 22rd
代數+數位統計+概率+博弈論
Morning:
- 高斯消元
- 線性方程組的解
- 解同餘方程組
- 一類Xor問題
- 常係數線性齊次遞推方程
- 矩陣乘法
高斯消元
- 係數矩陣/增廣矩陣
- (係數矩陣)簡單來說係數矩陣就是將方程組的係數組成矩陣來計算方程的解
- (擴增矩陣)就是在係數矩陣的右邊添上一列,這一列是線性方程組的等號右邊的值
- 矩陣的初等行(列)變換
- 定義 A
- 定義 B
- 項目3
- 定義 C
-
定義 D
線性方程組的解
> 齊次線性方程組的解只有兩種可能:0,無窮多
> 階梯行矩陣的 數目 < 未知量數目 ——有非零解
>非齊次線性方程組的解只有三種可能:無解、有唯一解、有無窮多個解
>把增廣矩陣經過初等行變換轉化爲階梯形矩陣
>對應的階梯形方程組中出現”0=d”這樣的方程——無解
>階梯形矩陣非零行數目=未知量數目——有唯一解
>階梯形矩陣非零行數目<未知量數目——有無窮多個解
>齊次線性方程組的解只有兩種可能:只有零解、有無窮多個解
[JSOI 2008] Sphere 題目鏈接
解同餘方程組
[tyvj1266] 費解的開關 題目鏈接
–> ‘翻轉棋’
Xor
- Xor 矩陣
- 把每個數寫成64位二進制串,每一位看做一個數字,然後把每個串寫在一行中,形成一個n*64的矩陣。
高斯消元解Xor方程組
對Xor矩陣進行高斯消元。
消元之後仍將每行看做二進制串,會得到很多新的二進制數。
高斯消元實際上是對Xor矩陣進行了若干次初等行變換。
一次初等行變換相當於對兩個數進行了Xor運算。
根據Xor空間的定義,這些新數的Xor空間和原來相同。
定理:對若干個數構成的Xor矩陣進行高斯消元不改變這些數的Xor空間。
用O(64n)的時間可以把Xor矩陣變爲簡化階梯形矩陣。
對簡化階梯形矩陣的n個數詢問上面的5個問題,與原來的n個數是等價的!
高斯消元經典題目之一:
Description
給出n個數,要求在其中選出一些數,使得異或和最大,輸出這個異或和。
Input
第一行包含一個正整數n
接下來n行每行一個非負整數ai
Output
輸出一行一個正整數,代表最大的異或和
Sample Input
3
10
4
13
Sample Output
14
HINT
n<=100000
ai<2^31
Code:
**這裏寫代碼片
Ex:
擴展到樹、圖:
BZOJ2115 [Wc2011] Xor 題目鏈接
Ac IDEA:
每一條路徑都可以看作爲從S-T的一條簡單路徑加上一些環,由於重複路徑的異或值抵消掉,所以答案就爲一條簡單路徑與一些環的異或值。
怎麼找所有的環呢?
n個點,m條邊的圖至多有m個(本質不一樣的)環,可以通過在生成樹上加邊來得到。
Code:
這裏寫代碼片
與Xor相關的構造題
- 構造異或方程組
- Waterloo Local Contest 2011.9.24 E
Ps:此類題比較難,不做過多要求。
其它應用
- 行列式
- 逆序數
- 在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱爲一個逆序。一個排列中逆序的總數就稱爲這個排列的逆序數。逆序數爲偶數的排列稱爲偶排列;逆序數爲奇數的排列稱爲奇排列。如2431中,21,43,41,31是逆序,逆序數是4,爲偶排列。
行列式的性質
- 行列式轉置,值不變
- 行列式一行的公因子可以提出去
- 兩行互換,行列式反號
- 把一行的倍數加到另一行上,值不變
- 上三角行列式的值是其對角線上的數的乘積
So:
可以消元,時間複雜度爲O(n^3)
- 行列式應用:生成樹計數
-
無向圖 求有多少生成樹 (瞭解即可)
常係數線性齊次遞推方程
如下:
其中a1,a2,…ak爲常數,ak!=0,稱爲k階常係數線性齊次遞推方程,
b爲初值。
解的過程類似於 數列的求解通項公式。
Attention!!
一般簡單的遞推公式必須要掌握,作爲基本的數學技能,倘若不會,那麼即使你會快速冪,會矩陣乘法,都無濟於事。
矩陣乘法
相關內容之前已經很詳細的寫過博文
http://blog.csdn.net/z_mendez/article/details/46986183
知道這個公式就好:
Afternoon
- 計數&數位DP
- 隨機變量的分佈
- 博弈論
計數&數位DP
基本計數模型—非降路徑問題:
從(0,0)到(m,n)的非降路徑數: C(m+n,m)
N1:從(0,0) 到 (n,n)下不接觸對角線非降路徑數
N2:從(1,0)到(n,n1)下不接觸對角線非降路徑數
N0: 從(1,0)到(n,n1)的非降路徑數
N3: 從(1,0)到(n,n1)接觸對角線的非降路徑數
關係: N=2N1=2N2=2[N0 N3]
N4: 從(0,1)到(n,n1)無限制條件的非降路徑數
關係: N3=N4
Catalan 數列
Catalan 數列(1,1,2,5,14,42,132…)
應用
1.Cn= 長度爲 2n的 Dyck words的數量。Dyck words是由n個X和n個Y組成的字符串,並且從左往右數,Y的數量不超過X,例如長度爲6的 Dyck words爲:
XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY
2.Cn=n對括號正確匹配組成的字符串數,例如3對括號能夠組成:
((())) ()(()) ()()() (())() (()())
3.n+1個數相乘,所有的括號方案數。例如,4個數相乘的括號方案爲:
((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))
4.Cn=擁有 n+1 個葉子節點的二叉樹的數量。例如 4個葉子節點的所有二叉樹形態:
5.Cn=n*n的方格地圖中,從一個角到另外一個角,不跨越對角線的路徑數,例如, 4×4方格地圖中的路徑有:
6.Cn= n+2條邊的多邊形,能被分割成三角形的方案數,例如 6邊型的分割方案有:
7.Cn= 圓桌周圍有 2n個人,他們兩兩握手,但沒有交叉的方案數。
Burnside引理&Polya原理
Burnside引理:
Polya原理:
POJ 2409 Let it Bead 題目鏈接
題意:給定顏色種數和環上的珠子總數,問有多少種染色方案(通過旋轉和翻轉相同的算同一種)。
當n爲奇數時,有n種翻轉,每種翻轉都是以一個頂點和該頂點對邊的中點對稱。有k^(n/2+1)*n種。
Solution:
當n爲偶數時,有n種翻轉,其中一半是以兩個對應頂點,另一半是以兩條對邊對稱。有k^(n/2+1)*n/2+k^(n/2)*n/2種。
考慮旋轉:枚舉旋轉角度360/n*i,(0
#include<stdio.h>
#include<string.h>
typedef long long ll;
ll k,n,ans;
ll pow(ll x,ll y)
{
ll ans=1;
while(y)
{
if(y&1)
{
ans=(ans*x);;
}
y/=2;
x*=x;
}
return ans;
}
ll gcd(ll x,ll y)
{
return y ? gcd(y, x%y) : x;
}
int main()
{
while(~scanf("%lld%lld",&k,&n),n||k)
{
ans=0;
if(n&1)
{
ans+=pow(k,n/2+1)*n;
}
else
{
ans+=pow(k,n/2+1)*(n/2)+pow(k,n/2)*(n/2);
}
for(int i=1;i<=n;i++)
{
ans+=pow(k,gcd(i,n));
}
printf("%lld\n",ans/(2*n));
}
return 0;
}
Dp:
沒什麼好說的,相關典型的問題的題解會在近期更新,敬請期待。
離散型隨機變量的分佈
連續型隨機變量的分佈
- And..
- 其它相關知識:
- 數學期望
- 方差
…(有興趣自己百度一下吧。。)
Tyvj1864 守衛者的挑戰 題目鏈接
{此題爲一道與概率有關的小動規}
Code:
這裏寫代碼片
Tyvj2020 Rainbow的信號 題目鏈接
Code:
這裏寫代碼片
博弈論經典模型:NIM
- 何謂 NIM ?
-
Nim遊戲是博弈論中最經典的模型(之一),它又有着十分簡單的規則和無比優美的結論 Nim遊戲是組合遊戲(Combinatorial Games)的一種,準確來說,屬於“Impartial Combinatorial Games”(以下簡稱ICG)。
———百度百科
如果想深入瞭解可以看看這個博客
http://www.cnblogs.com/exponent/articles/2141477.html
Example:
若干堆物品,兩人輪流從某一推取走任意數量的物品,規定取走最後一個物品的人勝。
- 此題有 先手必敗 的性質
-
把所有堆物品的數目異或起來,若爲0,則先手必敗.