2019 08 09 NOIP提高組 模擬 A 組

2021-09-26 01:12:02 字數 1055 閱讀 5602

t1:這題其實很簡單。

對於那些傳送門操作,我們設a、b、c、d分別表示乙個位置到上下左右的最近乙個#的距離,那麼我們會發現其實這個點到這4個點的距離可以用min(a,b,c,d)來替換。即a、b、c、d可以用min(a,b,c,d)來替換。

這樣我們就可以預處理出每乙個點的a、b、c、d,然後直接spfa即可。

t2:首先按key從小到大排序,然後樹的先序遍歷就出來了。

這題的一中解決方案就是每次從當前區間中選取乙個點作為當前區間的根。通過這個思想我們可以設出dp方程:設f[i][j][k]表示i~j這段區間選k為根的最大和。這是乙個區間dp,可以列舉兩邊區間的根,轉移方程不難推。

但是我們發現這個dp的時間複雜度是o(n^5)的,需要優化。接著我們發現其實i~j這乙個區間從k分開之後,i~k-1連向的根就是(k-1)+1,k+1~j連向的根就是(k+1)-1。這就說明i~j這個區間的上一級根要麼是i-1,要麼是j+1。這樣我們就可以簡化狀態:設f[i][j][0/1]表示i~j這個區間的上一級根為i-1(0)或j+1(1)時的最大和。

那麼轉移方程就從f[i][j][k]=max(f[i][k-1][g1]+f[k+1][j][g2]+……)變成f[i][j][0/1]=max(f[i][k-1][1]+f[k+1][j][0]+……)。

這樣問題就解決了。

總結:比賽時空超,下面說一下如何精確計算kb數的方法。

首先,1kb=1024b,1b=8位元組。而乙個int佔32位元組(就是4b),乙個long long為int的兩倍(即64位元組、8b)。

這一題如果開f[300][300][300]的話就是27000000*8/1024=210937.5kb,顯然超限。

t3:首先我們發現對於乙個i和a[i],如果要它對答案有貢獻的話,那麼必須要i-l=r-a[i](l、r為翻轉的區間)。

變一下可以得i+a[i]=l+r,其實這個式子的本質就是他們的中點相同。

那麼我們可以把所有i和a[i]根據i+a[i]排序,對於相同和的,我們按它的左端點從大到小排。

接下來我們就列舉翻轉區間,ans=max(之前的和當前翻轉區間的i+a[i]相同的區間的個數+沒被翻轉部分的答案)。

NOIP提高組 矩陣

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

NOIP提高組2005 過河

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

NOIP提高組 20151029模擬

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