在數軸上,每一秒可以移動
v 個單位,有
n個得分點,在ti
時刻移動到xi
可以得到一分。問:若時刻
0 在
0這個位置則最多可以得多少分?若時刻
0 在任意位置最多可以得多少分?
1<=
n<=
100000,|
xi|<=
200,
000,
000,
1<=ti
<=1,
000,
000
這道題在做的時候我用的是o(
nlog
2n) 的樹狀陣列套動態開點的線段樹。然而這種做法線段樹是可以略去的= =,主要是式子裡的一些性質沒有找出來。
我的方法思路主要如下。首先先把ti
=0和x
i=0 這個的得分點加入所有點中,然後倒著做,設i,
j 是兩個不同的得分點且ti
>tj
,若從i 可以到
j,則有|x
i−xj
|<=(t
i−tj
)v
因為是絕對值小於某個數,那麼不妨忽略掉負的,則有xi
−tiv
<=xj
−tjv
且−xi−t
iv<=−x
j−tj
v 兩者同時成立。
如果將xi−
tiv 和−x
i−ti
v 分別作為
x 座標和
y座標來將這些點投影到二維平面上,那麼如果兩個點可以轉移那麼兩個點與原點構成的矩形必定是包含關係,只需要按
x 座標排序,
y座標用樹狀陣列維護,再用以ti
為關鍵字的線段樹來維護最大值就可以做出來了。
但是考慮左邊是絕對值,如果上面的式子成立的話那麼右邊必定為正,那麼就是說不需要判斷ti
的關係了。那麼就是按
x 座標排序然後用樹狀陣列維護
y座標進行轉移就可以了。
另外還有乙個方法,首先把ti
全部乘v ,也就是把一秒走
v步變成
v 秒走
v步,那麼可以轉移的部分形成了乙個等腰直角三角形,將座標系旋轉π4
,用掃瞄線來維護轉移就可以了。
題目要求輸出兩個數在一行,然而我輸出到了兩行導致比賽時這道題爆零了。對拍了個半年,昨天是對拍寫錯了,今天是格式不對。簡直了。
八校聯考2013 軍訓
有乙個長度為 n 的二元組陣列,要求把它劃分為若干段,不妨設劃分出了 m段,二元組 i 的第乙個數為ai 第二個數為bi 要求在滿足 m 1i 0 ma xrij lia j li mita 的情況下,最小化ma xm 1 i 0 rij lib j 其中n 20000 答案顯然可以二分,記為li ...
2013百度校招筆試題
一 簡答題 30 1 資料庫以及執行緒發生死鎖的原理及必要條件,如何避免死鎖 答 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲...
2013百度校招開發測試筆試題目
一 簡答 1.列舉常見的幾種雜湊演算法,說明雜湊演算法的用途 2.闡述osi七層網路模型,並判斷http屬於哪一層 3.c語言 在執行之前滿足的條件,並描述執行過程 二 演算法設計 大致意思 1.將一堆蘋果裝袋,若3個裝一袋,則剩餘2個 若5個裝一袋,則剩餘3個 若7個裝一袋剩餘2個。設計一種演算法...