B 例題2 防具布置

2021-10-19 07:41:37 字數 1331 閱讀 7387

第一眼看題目,壓根就沒去想要用二分,但看到是在二分這個章節中才去用二分去想

不說廢話了,進入正題:

首先: 二分因先考慮二分什麼–>二分看破綻是在前面還是在後面

插播一條訊息:

由於,破綻只有乙個,也就是說整個陣列中(每個位置的防具的個數的那個陣列)

只有乙個為奇數,則其他的都為偶數

那就可以用字首和判斷破綻的大概位置,若破綻在 1 ~ mid 中,則 1 ~ mid 的字首和為奇數

然後: 就是要判斷對於當前位置而言它以及它前面的防具的個數

然後就可以推出,對於每一段防具而言,在當前位置以前的防具的個數:

ll find ( ll wz )

return ans;

}

最後: 再判斷一下,是否有破綻即可

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

const ll n=

1e6+

100,m=

1010

;ll n,m,l,r,f[n]

,s[n]

;struct sb //個人喜好......

a[n]

;bool cmp ( sb a,sb b )

ll find ( ll wz )

return ans;

}bool check ( ll wz )

int main ()if

( find ( maxn )%2

==0) printf (

"there's no weakness.\n");

else printf (

"%lld %lld\n"

,l,find ( l )

-find ( l-1)

);//乙個小技巧: 字首和思想: 每個點上的數為它的字首和-它前面那個數的字首和

}return0;

}

YBTOJ 防具布置

有 n 組防具。第 i 個防具會標記在區間 s i,e i 中模 d i 的值是 s i bmod d i 的位置。求哪個位置被標記了奇數次。我們可以考慮二分。那麼找一下題目中隱藏的單調性。可以發現,我們可以用一段區間的標記總值作為 key,比如當前二分到 l,r 我們可以先判斷 l,mid 的是否...

貪心 Ybt 防具布置

設 k ik i ki 為從 0 i0 i 0i的防具的多少。由於題目中說到,整個防線上只可能有乙個破綻。所以輸入的防線如果有破綻,則 k 0k 0 k0 k ik i ki 全是偶數,k ik i ki 後全是奇數。二分破綻點即可。如果沒有破綻,則 k kk 全是偶數。include includ...

遞推 B 例題2 奇怪漢諾塔

漢諾塔問題,條件如下 這裡有 a aa b bb c cc 和 d dd 四座塔。這裡有 n nn個圓盤,n nn 的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a aa上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a aa 轉移到塔 d dd 上。每次可以...