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...