洛谷 P2205 USACO13JAN 畫柵欄

2022-05-10 04:38:14 字數 1295 閱讀 9540

這題其實沒什麼,但用到的演算法都十分有用。做乙個不恰當的比喻,這是乙隻必須用牛刀殺的雞,但因為我這個蒟蒻殺不死牛,所以只能找只雞來練練手。

題目描述

farmer john 想出了乙個給牛棚旁的長圍牆塗色的好方法。(為了簡單起見,我們把圍牆看做一維的數軸,每乙個單位長度代表一塊柵欄)他只是簡單的把刷子蘸滿顏料,系在他最喜歡的奶牛bessie上,然後讓bessie來回地經過圍牆,自己則在一旁喝一杯冰鎮的涼水。(……-_-|||) bessie 經過的所有圍牆都會被塗上一層顏料。bessie從圍牆上的位置0出發,並將會進行n次移動(1 <= n <= 100,000)。比如說,「10 l」的意思就是bessie向左移動了10個單位。再比如說「15 r」的意思就是bessie向右移動了15個單位。給出一系列bessie移動的清單。fj 想知道有多少塊柵欄塗上了至少k層塗料。注意:bessie最多會移動到離原點1,000,000,000單位遠的地方。

輸入輸出格式

輸入格式

第1行: 兩個整數: n k 

第2...n+1 行: 每一行都描述了bessie的一次移動。 (比如說 「15 l")

輸出格式

乙個整數:被至少塗上k層塗料的柵欄數

好像一眼就能看出離散化,但我這個蒟蒻之前並沒有太多的了解掃瞄線。

思路:離散化掃瞄。

把一條線段的兩個端點存下來,左邊那個點的值是+1,右邊是-1。之後按距離排序。

然後開始掃瞄,每掃到乙個點就加上它的值到sum裡,如果有時候sum>=k,那麼ans加上這條線段的長度(這個一會兒看注釋)

#include#include

#include

using

namespace

std;

struct

nodew[

400001

];char

c;int

n,l,i,k,ans,cnt;

inline

bool

cmp(node a,node b)

intmain()

else

}sort(w+1,w+cnt+1

,cmp);

l=w[1

].v;

for (i=2; i<=cnt; i++)

l+=w[i].v;

}printf(

"%d\n

",ans);

return0;

}

洛谷 P1605 迷宮 USACO

1.problem description 迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸...

洛谷 P1339 USACO09OCT 熱浪

有乙個 n 個點 m 條邊的無向圖,請求出從 s 到 t 的最短路長度 簡單的無向圖最短路問題,採用堆優化的dijkstra dijkstra 初始到所有點的距離標記為很大很大,兩個集合 已發現和未發現。將起點距離標記為0。之後,每次從未發現的節點集合中挑選距離起點最近的 單源最短路 放入已發現的節...

洛谷 P2894 USACO08FEB 酒店

題目描述 用線段樹維護三個值 區間最長空位長度,從左端點可以延伸的最長空位長度,從右端點可以延伸的最長空位長度。include include using namespace std const int n 2e6 7 int n,m intlen n max n maxl n maxr n laz...