1. 程式人生 > >集訓Day1

集訓Day1

math otto lin mat 所有 bsp ensure 取整 每次

雅禮集訓2017Day1的題

感覺上不可做實際上還挺簡單的吧

T1

區間加 區間除法向下取整

查詢區間和 區間最小值

大力上線段樹,把除法標記推到底,加法標記就是按照線段樹的來

先拿30

然後60的數據隨機不知道該怎麽做

開始YY

那個“向下取整”的tag並不能累加

所以考慮轉化

除法->減法

如果一個區間要減的都是一樣的數,直接減就行了,如果不一樣,就遞歸下去,反正1個數肯定減的是一樣的

本來想拿60,結果A了

T2

n*n的棋盤(n = 1000)每次把找一行,把它的顏色序列copy下來塗到一列上

問最少多少次能把整個棋盤塗黑

首先 全白肯定無解

其次 只要把一行塗黑 之後塗n次就可以了

然後 大力模擬發現並沒有比這個優的策略

於是一頓亂搞

我們枚舉第i行,假裝要把他弄成全1的。

設第i行的0的數量為cc[i],那麽考慮第i列是否含有1,如果含有1那麽就可以用含有1的那列的那行給第i行所有0的地方賦值,需要cc[i]步。

如果第i列不含有1,我們要花1次操作給第i列搞個1出來,所以答案是cc[i]+1步。

每行取個min

聽說是簽到題...數據極水 被各種對的不對的做法爆切

T3

s w 為兩字符串,定義:

  1. $w[l,r]$ 表示字符串 $w$ 在區間 $[l,r]$中的子串;
  2. $w$ 在 $s $中出現的頻率定義為$w$ 在 $s$ 中出現的次數;
  3. $f(s,w,l,r)$表示 $w[l,r]$ 在 $s$ 中出現的頻率。

比如 $f(ababa,aba,1,3)=2$。

現在給定串 $s$,$m$個區間 $[l,r] $ 和長度 $k$ ,你要回答 $q$ 個詢問,每個詢問給你一個長度為 $k$ 的字符串 $w$ 和兩個整數 $a,b$,求:

$\sum\limits_{i = a} ^ b f(s, w, l_i, r_i)$

重要條件

$\sum w_i$ 是個定值

所以很eazy看了題解後想到要寫兩種做法

首先考慮k小的情況

這種情況我們可以用SAM暴力處理出right集合計算每一個子串在當前串出現的次數

k大時可以考慮在SAM的parent樹上跑一個倍增

暴力記前綴然後倍增往上跳找到後綴

這樣遍歷每個子串就可以做了

這是什麽完全不可做的毒瘤題啊媽媽帶我回家吧我不學OI了

嗯 擡頭 微笑

感覺沒看到簽到題有點虧...想T1想了2個小時有點不應該

然後1個小時迅速切T2

T3就沒時間想了只能n^3的KMP

最後100 + 100 + 30

感覺拿了個大眾分?

集訓Day1