1. 程式人生 > >NOIP2016普及組正式賽

NOIP2016普及組正式賽

T1:直接計算

T2:列舉法

T3:因為一共得人數不超過100000,所以我們可以用一個佇列儲存來訪人得國籍,然後記錄下每一船的尾指標。在求一個ans時,把所有的與當前時間相差86400秒以上的船去掉,當前船加上就行了。

T4:這題要先化簡公式後可得出:

設CD之間的距離為i,則AB之間的距離為2i,BC之間的距離為6i+k(k>0)。

85分做法:

首先儲存每一個魔法值有多少個魔法道具,設為w[i]。

然後列舉ABC三個數的位置,算出D,判斷是否符合條件,符合則儲存下來,儲存方法如下:

ans[A][1]+=(w[B]*w[C]*w[D]);

ans[B][2]+=(w[A]*w[C]*w[D]);

以此類推。

100做法:

我們只需列舉i,A,就可以求出ans[A],ans[B]。我們只要知道i和A,就可以求出B,那麼C,D有多少種可能呢?只是我們字尾和解決。設s[l]表示但長度為i時l到n之間CD的對數,則s[l]=s[l+1]+w[l]*w[l+i]。那我們設A的值為j,則ans[A][1]+=(w[B]*s[j+i*8+1])。因為C的最小值是A+i*8+1。ans[B]+=(w[A]*s[j+i*8+1])。

求CD的做法跟AB一樣,只不過要用字首和。