Sajam(01翻轉 bitset優化)

2021-09-13 15:00:01 字數 853 閱讀 5964

原題:

題意:

n*n的01矩陣,你可以無限次翻轉一行或者一列,可以最多翻轉k(k<=n)次乙個點。問是否可以全部翻轉成0。

解析:

k<=n說明至少有一行不會被翻轉單個點,或者k=n時每行翻轉乙個點。那麼列舉每一行為那一行,將其他行與之對比(可以翻轉後再對比),不同的數量就是需要翻轉單個點的數量。因為有列翻轉,所以全部行都一樣後可以全部變成0。

每一行乙個點的情況也很簡單,第一行列舉每個位置翻轉,判斷其他行是否只翻轉乙個點後與之相同。

不同點的個數用bitset維護。

#include

using

namespace std;

char x[

1002];

bitset<

1002

>b[

1002];

intmain()

}if(k==n)}if

(can)

return0*

printf

("da\n");

} b[1]

.flip

(n);

}int ans=

1e9;

for(

int i=

1;i<=n;i++

) ans=

min(ans,sum);}

if(ans<=k)

printf

("da\n");

else

printf

("ne\n");

}

bitset 優化 01 矩乘

這裡的矩乘並不狹隘地專指一般矩陣乘法,而可以指所有與一般矩乘一樣具有結合律的二元矩陣運算。例 定義一種 01 矩陣乘法 a cdot b c 為下面的 c for int i 1 i n i for int j 1 j n j for int k 1 k n k c i j a i k b k j ...

牛客 簡單瞎搞題 bitset 01dp

牛客 簡單瞎搞題 bitsert 01dp 一共有 n個數,第 i 個數是 xi xi 可以取 li ri 中任意的乙個值。設 s xi2s xi2,求 s 種類數。第一行乙個數 n。然後 n 行,每行兩個數表示 li,ri。輸出一行乙個數表示答案。如果是dp,定義dp i j 第n行,s為j是否有...

C 程式設計例項之翻轉01串

問題描述 給你乙個長度為n的01串。現在想讓你找出最長的01交替子串 子串可以不連續 比如 1010,0101是01交替的串,1101則不是。現在你可以把某乙個連續的區間進行翻轉,即0變1,1變0。問修改之後的最大01交替子串的長度是多少 問題分析 看到題目後,不必使用暴力方法解決,可以從數學的角度...