線性基入門:
給你乙個數列n個數字,構造乙個線性基出來。對於原數列任意乙個數字,都可通過選取線性基中若干數字xor運算得到。
兩個公式:
1:如果a^b^c=0,則a^b=c,如果乙個數字c沒有加入到線性基中,說明已存在a,b,且a^b=c
2:如果a^b=c,則a^c=b.
構造程式如下:
#includeusing namespace std;int n,m,cnt,ans;
long long p[128];
char s[128];
void insert(long long x)
else
x^=p[i];
}}int main()
for(int i=0;i<=62;i++)
if(p[i])
cout《執行過程:
當加入2後,不加入
當加入1後,不加入
..................
最終形成的線性基為9,1,7,2.總個數是最小的,且這些數轉成4位2進製後
其最高位如果為1的,將是各個數字中是唯一的。
注意構造出來的線性基並不是唯一的。
對於上面這個數列,線性基為(1,2,4,8)也是可以的。
已知一組彩燈是由一排n個獨立的燈泡構成的,並且有m個開關控制它們。從數學的角度看,這一排彩燈的任何乙個彩燈只有亮與不亮兩個狀態,所以共有2n個樣式。由於技術上的問題,peter設計的每個開關控制的彩燈沒有什麼規律,當乙個開關被按下的時候,它會把所有它控制的彩燈改變狀態(即亮變成不亮,不亮變成亮)。假如告訴你他設計的每個開關所控制的彩燈範圍,你能否幫他計算出這些彩燈有多少種樣式可以展示給他的女朋友?
注: 開始時所有彩燈都是不亮的狀態。
輸入輸出格式
輸入格式:
每組測試資料第一行為兩個整數n和m,用空格隔開。緊接著是有m行,每行都是乙個長度為n的字串,表示乙個開關控制彩燈的範圍(n盞燈),如果第i個字母是大寫字母』o』,則表示這個開關控制第i盞燈,如果第i個字母是大寫字母』x』,則表示這個開關不控制此燈。
輸出格式:
輸出這些開關和彩燈可以變換出來的樣式數目。
由於這個值可能會很大,請求出它對於整數2008的餘數。
輸入輸出樣例
輸入樣例#1:
2 3oo
xoox
輸出樣例#1:4說明
可見樣例中第乙個開關控制了所有的彩燈,而後兩個開關分別控制了第乙個和第二個彩燈,這樣我們可以只用後兩個開關控制彩燈,可以變換出來所有的22個狀態。
本題可以翻譯成給出m個n位二進位制數 , 取若干個異或,求有多少種結果。
本質就是求出線性基的個數x,結果即為2^x
線性基就是把原有的集合用乙個新的集合替代之,新的集合裡面數相互異或可以得出原有集合的數相互異或的答案。
搞出線性基的性質 : a 和 b 的所有xor 結果 等同於 a和 a xor b的所有結果。
#includeusing namespace std;
int n,m,cnt,ans;
long long p[128];
char s[128];
void insert(long long x)
else x^=p[i];
}}int main()
for(int i=0;i<=62;i++)if(p[i])ans++;
printf("%lld",(1ll
}
洛谷3857 TJOI2008 彩燈
已知一組彩燈是由一排n個獨立的燈泡構成的,並且有m個開關控制它們。從數學的角度看,這一排彩燈的任何乙個彩燈只有亮與不亮兩個狀態,所以共有2n個樣式。由於技術上的問題,peter設計的每個開關控制的彩燈沒有什麼規律,當乙個開關被按下的時候,它會把所有它控制的彩燈改變狀態 即亮變成不亮,不亮變成亮 假如...
洛谷3761,TJOI2017城市
這道題一開始在想可以列舉每個點對,嘗試刪除其間的邊,因為有o n2 個點對,所以要o 1 更新答案 後來發現,因為是樹,所以只有o n 個點對是有用的 這麼顯然的結論一開始沒發現,看來還是我太弱了 然後就可以每次o n 判斷 首先定義在一棵樹 x 中,對於點y,f x,y 等於以 y 為根的有根樹,...
洛谷P3761 TJOI2017 城市
從加里敦大學城市規劃專業畢業的小明來到了乙個地區城市規劃局工作。這個地區一共有ri座城市,1條高速公路,保證了任意兩運城市之間都可以通過高速公路相互可達,但是通過一條高速公路需要收取一定的交通費用。小明對這個地區深入研究後,覺得這個地區的交通費用太貴。小明想徹底改造這個地區,但是由於上司給他的資源有...