HDU5650 找規律 組合排列中的小知識點

2021-07-16 09:52:05 字數 739 閱讀 7157

0 題目

給出n個數,將n個數的所有集合都列出來,每個集合內的元素異或得到乙個數,將所有集合的數再異或。

1 分析

規律① 如果n=1,那麼輸出該數;如果n>1,那麼在這n個數組成的集合中,每個數出現的個數都是偶數,那麼最後的異或結果就是0。

(已證,假如n個數分別為num1,num2,...numn,那麼以num1出現次數為例,集合之中元素個數為1且包含num1的集合個數為1,集合之中元素個數為2且包含num1的集合個數為c(n-1,1)個,集合之中元素個數為3且包含num1的集合的個數為c(n-1,2)個......集合之中元素個數為n-1且包含num1的集合的個數為c(n-1,n-2),集合之中元素個數為n個且包含num1的集合的個數為c(n-1,n-1)個。而這些個數分別從左邊和右邊看,都是一一相等對應的,所以這些數之和是偶數。如果是奇數個,容易發現中間的那個數也是偶數。)

規律②n個數組成的集合之中,每個數出現的次數都是2^(n-1)次。(2的n-1次方個)

(已證,先看①,最後那些式子相加,就等於2^(n-1),即c(n-1,1)+c(n-1,2)+...+c(n-1,n-2)+c(n-1,n-1)=2^(n-1). )

(note:異或,轉成二進位制後,異或左右的兩個數對應位上相同都為1或0則輸出0,如果不同則輸出1)

#include #include #include #include #include using namespace std;

int main()

cout<<"0"<

hdu 5106 組合數學 找規律

給定n和r,要求算出 0,r 之間所有n onebit數的和,n onebit數是所有數字中1的個數。對於乙個n bit數,可以根據與r最高不同位的位置分成幾類。比如r 100100010,可以分成0 xx,1000 xx,10010000x三類。x處可任取0或者1。x的個數為n,x中1的個數為k。...

數學 找規律HDU 1030

題目難點在於找到規律 根據公式求解 從三個角度看這個圖,level,left,right,如下圖,題目的答案就是3個圖上2個點之間的層數的高度差之和。例如 6 12 level 1,left 1,right 1,答案就是3。例如 3 12 level 2,left 1,right 2,答案就是5。i...

hdu1564博弈 找規律

include include include include include include include include include include include include include define pi acos 1 define ll long long define mo...