今天的比賽做的不好,t1很簡單,但是我竟然沒有想到。
t1:首先,對於f[1…n-1]=1的做法十分顯然,直接矩乘就可以了。
然後,對於這一道題,我們發現最終的f[n]一定是由f[1]、f[2]……f[k]的某個次冪分別乘起來的,那麼我們就可以分開處理每乙個f[i]的最終指數,具體做法和上面一樣。
總結:1、重申一遍:這種n很大k很小的題一般就是矩乘。就算一下子推不出來矩陣也不要緊,慢慢想一想。
2、c++在定義mod的時候,用define或者const會使你的程式快很多。
t2:貪心即可。
把所有的區間按l從小到大排序,然後對於每乙個點,把l在它之前的區間的r都扔進乙個堆裡,然後每次刪除不合法的r,刪完時候如果堆不為空,那麼就取出堆頂的r與當前點匹配。這樣貪心下去的結果可以保證是對的。
t3:這題類似以前一道做過的題,但是我竟然沒有記起來。
首先我們處理出dfs序,然後對於一對u、v限制,若u、v不為祖先關係,那麼dfn[u]~dfn[u]+size[u]-1這段區間和dfn[v]~dfn[v]+size[v]-1這段區間是不能組合的,若他們是祖先關係,那麼就要處理出fa到son的第乙個兒子(具體推一下即可)。
然後我們就可以得到很多組不能組合的點對,最終我們要求可以組合的方案數,這個就是乙個簡單的掃瞄線操作。
總結:在這裡說一下這種被覆蓋多次的點對最終答案的貢獻只有1的掃瞄線問題怎麼做。
其實核心就是要明白對於乙個矩陣加1和-1時所要用到線段樹上的區間是一樣的。
然後我們就可以對於線段樹上的每乙個區間,記錄下它被覆蓋的次數和它的答案。若覆蓋次數》=1,那麼答案就是r-l+1,否則答案就等於左兒子的答案加上右兒子的答案。在修改時只需修改當前區間的被覆蓋次數就可以了。
NOIP提高組 矩陣
在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...
NOIP提高組2005 過河
過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...