GDOI 3 21 模擬總結

2021-06-29 06:39:28 字數 2614 閱讀 8248

今天跟雅禮聯考,結果**爆了。。。。

先講一下題目大意:

第一題:有遞推式

x[n] = a * (x[n - 1])^2 + b * x[n - 1] + c;

現在給定a,b,c,n,m,x[0],求x[n] % m;

資料有兩部分:

1.min(n,m) <= 10^6

2.n,m<=10^9,2a|b,4ac = b^2 - 2b,m為質數

第二題:在 n 行 m 列的網格中,你要圈一些地。你從左上角出發,最後返回左上角,路徑內部的區域視為被      你圈住。你不可以進入網格內部,只能在邊上行走。你的路徑不能在左上角以外自交,但是邊足夠      寬,你可以重複經過而不自交。網格中有一些格仔對你很重要,你要盡量圈住它;而另一些格仔對      你有壞處,你不能圈住它。求圈住 i 個重要的格仔的最小路徑長度。

n,m<=50,且重要的格仔和有壞處的格仔的總數不超過10

第三題konrad,delfador 和 kalenz 一行人又喜聞樂見地被追殺了。他們面臨的是一條有 n 個地點的路,他們從 0 號地點出發,要逃到 n 號地點去。每個地點的戰鬥都有一定的金幣收入 ai,也有一定的部隊損失 bi。為了更好地逃生,delfador 還弄到了一塊傳送寶石,這樣一行人就能向後傳送不超過 l 的距離。從乙個地點傳送到另乙個地點時,konrad 會選擇路徑上除起點外的地形指數 ci 最大的地點進行戰鬥,地形指數相同時選擇最靠後的。作為優秀的領導者,konrad 希望總金幣收入與總部隊損失的比值最大。

n<=30000

做題過程:

一開始看第一題覺得應該是乙個水題,對於n<=10^6直接暴力,m<=10^6很顯然會有迴圈節,然後剩下來的部分我一直盯著那兩個特殊條件,推了很久的通項一直沒有推出來,沒有注意到各種各樣的形式。

然後去看第二題,一看有閉合的圖形,覺得又要用插頭dp去做,不會,直接放棄了第二題,做這種題目做的太少,毫無思路。

還有兩個多鐘,去看第三題,一看就覺得要二分,但很久沒有做過分數規劃的問題,一開始居然沒有想到把式子移項,看了將近半個鐘頭才發現可以移項,然後就直接dp+線段樹。但我的線段樹寫的太齪,沒有注意常數,而且二分的次數過多,精度設的太大,最後還是t掉了。。。

最後只有第一題的75分和第三題的50分。。。。。。。前面全是雅禮的,而且他們居然第二題全切了。。。。感覺他們實在是太厲害了。。。結果後來知道正解後哭暈在廁所了。。。。。。

題解:第一題:我們只看2a|b,4ac=b^2-2b這一部分的資料。。。。。

設b=2ak

則:4ac=b^2-2b,c = ak^2-k.

x[n] = a*x[n-1]^2 + b*x[n-1] + c  -----> x[n] = a*x[n-1]^2 + 2ak * x[n-1] + ak^2 - k

x[n] = a * (x[n-1] + k)^2 - k

x[n] + k = a * (x[n-1] + k) ^ 2

設p[i] = x[n] + k,則 p[i] = a * p[i - 1] ^ 2

則 p[n] = a^(2^n - 1) * p[0] ^ (2 ^ n);

現在的問題變為如何求a^(2^n - 1) 和 p[0] ^ (2^n)

注意到m為質數,則根據費馬小定理,a^(p-1) % p = 1

然後就沒有然後了。。。。。

第二題:

注意到自交的話其實是沒有什麼所謂的,只需要直接走就好了。。。

並且假如在一條較優的路徑中,乙個點被包含,那麼我們做這個點往上延伸的一條射線必然經過奇數次我們走過的邊。

那麼我們就可以設乙個二進位制狀態s,s的每乙個位表示我們乙個點他上面是有奇數條邊還是有偶數條邊。

然後我們直接做一次bfs就好了。。。。

第三題:

設我們二分出來的答案為p。真實答案為ans

則若ans >= p,sigma(a[i]) / sigma(b[i]) >= p,sigma(a[i]) >= p * sigma(b[i]),

sigma(a[i] - p * b[i]) >= 0

設d[i] = a[i] - p * b[i],f[i] 表示走到i這個點sigma(d[j])最大為f[i]

我們開始dp

我們維護乙個關於c[j] 單調遞減的佇列q

則q[k - 1] ~ q[k] - 1的點與i的需要戰鬥的地方就是q[k]

我們維護乙個線段樹t,其中乙個單獨的節點j維護的是j遞推到i的值是多少。

即f[j] + d[j->i戰鬥的地方]

我們看一下我們對q進行操作時對t的影響是什麼

假如我們要pop掉佇列尾,設為q[en]

則q[en - 1] ~ q[en] - 1都不受q[en]限制,則我們給q[en-1]~q[en] - 1區間減去d[q[en]]

假如我們要在佇列尾insert(p)

則q[en] ~ p - 1都受p限制,我們給q[en] ~ p - 1區間加上d[p]

最後f[i]就直接在t[1] ~ t[i - 1]取個max

這題需要一些常數上的優化。。。。。。

考試暴露的問題:

簡單題的一些性質沒有足夠的細心推到出來。

題目的一些特殊條件沒有利用好,一些題目不熟練或者說是形成了慣性思維

程式的常數優化沒有做好。

gdoi bless !!!!!!!

GDOI模擬8 21總結

今天做了cqoi2013的題。第一次5個小時做5道題 先看了半小時的題。t5是初中做過的原題,記得是處理出上下界然後暴力列舉就行了,就先打了t5,花了乙個小時搞定了t5,過了樣例和自己出的幾個資料就沒管了 沒對拍是因為我覺得資料生成器有點難搞 然後這題做法本來就是暴力 然後去看了下之前沒怎麼看懂題的...

GDOI模擬4 15 4 17總結

day1 題目都不會做。所以打完暴力開始優化暴力,結果有乙個程式優化錯了,另乙個 暴力的時候多打了乙個符號爆零了。在看第一題的時候其實是想到了正解,但是看時間有點大不敢打。其實打了可能也有60分的,賽後才知道。這個方法常數卡的好可以拿100分。結果第一天就只拿了100分。理論上第一天 60 100 ...

GDOI2016模擬8 13總結

這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...