2017 08 05 NOIP提高組 模擬賽B組

2021-08-05 18:30:11 字數 1304 閱讀 2653

t1:一道水題,但是比賽時我卻爆了0。

只需把k轉換成二進位制數,再當成三進製數的形式輸出。

總結:要記住,二進位制轉換出來的陣列的頭實際上是相當於二進位制數的尾,而陣列的尾相當於二進位制數的頭。此題要從二進位制數的尾開始列舉,也就是從陣列的頭開始迴圈。

t2:狀壓dp。

設f[i][j][k]表示已經選了i個人,選擇的狀態為j,目前的矛盾數量為k的方案數。

則f[i][j][k]=sum(f[i-1][j-2^(l-1)][k-w])

l表示的是第i次選的人,w表示的是第i次選l新增的矛盾數量。

l很好理解,但是關鍵就是w怎樣求?

我們知道,針對每乙個l,如果乙個與它存在矛盾關係的人比他先入隊,那麼l入隊的新增的矛盾的個數就要加一。所以我們可以判斷一下在當前的j裡面有多少個與l有矛盾的人是已選的,發現乙個就把w+1,最後便能求出答案。

總結:狀壓dp一定有一些不合法的狀態,所以我們可以通過預處理出所有合法的狀態來進行優化,而且這樣優化的效率是很高的。

t3:一道很很難分治。

我們可以利用快排的思想,把乙個序列分開兩半來處理,每一半單獨的方案數都很好求,但是關鍵是如何求兩半組合起來的方案數(也就是跨過中點的區間的個數)。

我們把當前區間l,r分為兩個區間(l,m)和(m+1,r)(m=(l+r)/2)。

首先,我們先掃一遍(m+1,r)這個區間,記錄下這個區間的最大值和最小值的變化(也就是dh所說的那個6 3 2 1和6 7 8),接著對這個區間維護它的最大值、最小值以及最大值最小值的乘積的字首和。

接著,我們掃一遍m~l,這是在列舉左端點。針對每乙個左端點i,我們i~m的最大值為max_l,最小值為min_l,那麼我們從剛剛維護的(m+1,r)的最大值的變化中找到乙個正好大於max_l,最小值的變化中找乙個正好小於min_l的數,例如:

最小值的變化:6 3 2 1

最大值的變化:6 7 8

max_l=7,min_l=3

那麼找出來的值就是2和8.

那麼我們假設2的位置小於8的位置,則

1、從m+1~2的位置-1這一段的min為min_l=3,max為max_l=7,所以這一段對答案的貢獻就是3*7*2的位置到m+1的長度。

2、從2的位置到8的位置-1這一段的max為max_7,min不確定,而我們只需要知道這一段min的和就可以計算對答案的貢獻,er我們可以利用字首和來求這一段min的和。

3、從8的位置到r這一段的min和max都不確定,但我們只需要知道這一段min*max的和就夠了,這個我們也可以用字首和來解決。

那麼2的位置大於或者等於8的位置的情況也和上面差不多,只需再討論一下即可。

這樣我們就可以做出這道題了。

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...