1. 程式人生 > >模擬賽01 總結

模擬賽01 總結

方法 求一個 判斷 至少 子圖 就會 單獨 問題: 。。

題解

1. 數對子

首先發現兩個數異或起來有奇數個1 的充要條件就是一個數有奇數個1,另一個有偶數個1

(這個性質我竟然沒發現。。。)

然後就轉化為求一堆區間的並中有多少個數二進制有奇數個1,多少個數二進制有偶數個1

先把區間離散化成$O(n)$個小區間 把每個區間變成一些小區間

然後只要能求一個區間裏有多少個二進制有奇數個1即可 這樣是$O(n^2)$

有兩種方法:

1、數位dp

2、考慮區間$[l,r]$ 我們只要計算$[1,l-1]$的值和$[1,r]$的值就可以了

發現(0,1),(2,3),(4,5)... 每一對數都是最後一位一個是0,一個是1

然後考慮區間$[1,l]$ 如果l是奇數 那麽一半對一半 否則單獨判斷l就好了

2.逆序對

一直在想偶數往奇數裏插的做法

沒有想過奇數往偶數插

結論:把每個奇數單獨考慮 這樣做出來的解一定可行

3.蓋房子

①有k個位置不能放(k≤8)(容斥,$2^k$)

②每行每列至少一個

③正負對角線至少一個(容斥,$2^2$)

④正好放n個

現在變成什麽問題:

一個格子圖,有一些格子放了東西,一些格子不能放東西,某些對角線不能放東西

先把對角線去掉

然後另一條對角線(如果還有)就會變得比較扭曲

然後對角線就解決了

模擬賽01 總結