(file io): input:paint.in output:paint.out
時間限制: 1000 ms 空間限制: 128001 kb 具體限制
goto problemset
題目描述
農夫約翰最近正在將他的柵欄粉刷一下(這裡所有的柵欄都是在一條直線上的)。他是這樣來粉刷的:他從位置0
00出發,然後執行n
nn條指令,例如,指令可以是「10l
」「10 l」
「10l
」,表示約翰從當前的位置向左移動10
1010
個單位的距離,並且粉刷移動過程中遇到的柵欄,又或者是「15r
」「15 r」
「15r
」,表示約翰從當前的位置向右移動15
1515
個單位的距離,並且粉刷移動過程中遇到的柵欄。
給定所有約翰需要移動的指令,請計算所有柵欄中至少被粉刷兩次的柵欄的總長度。約翰最多遠離初始位置1000000000
1000000000
100000
0000
個單位的距離。
輸入
第一行乙個正整數nnn。
接下來第2
22行到第n+1
n+1n+
1行,每行表示每條指令。
輸出
只有一行乙個整數,表示所有柵欄中至少被粉刷兩次的柵欄的總長度。
樣例輸入
62 r
6 l1 r
8 l1 r
2 r樣例輸出
6資料範圍限制
1<=n<=100000。
提示
說明:樣例中,有6
66個單位的長度至少被粉刷兩次。分別是[−11
,−8]
,[−4
,−3]
,[0,
2]
[-11,-8],[-4,-3],[0,2]
[−11,−
8],[
−4,−
3],[
0,2]
。解題思路
把每一次的操作變成乙個區間,存區間的右端和左端。。
按照從小到大的順序快排。。然後純模擬,五種情況分類討論。。
**
#include
#include
#include
#include
#include
#include
using namespace std;
int x,ans,h,t,n;
string s;
char c;
struct cca[
150000];
bool cmp
(const cc&l,
const cc&r)
int main()
sort
(a+1
,a+n+
1,cmp)
; h=a[1]
.x;
t=a[1]
.y;for
(int i=
2;i<=n;i++
)else
if(a[i]
.x>t)
else
if(a[i]
.xelse
} cout<}
粉刷柵欄演算法問題
在網易雲上面看到這道問題,跟大家分享一下,也不知道思路有沒有問題。望指正。題目如下 給定一組長度為 n 的柵欄,從左到右高度依次是 h i 你需要對這個柵欄粉刷油漆,每次你可以粉刷一行或者一列。問最少粉刷幾次,可以給所有柵欄上漆。不能多刷 輸入格式 第一行包含乙個整數,表示柵欄的長度。接下來的一行,...
Hrbust 2225 粉刷柵欄 分治
粉刷柵欄 time limit 500 ms memory limit 32768 k total submit 111 35 users total accepted 34 24 users rating special judge no description 給定一組長度為 n 的柵欄,從左到...
HRBUST 2225 粉刷柵欄(分治)
給定一組長度為 n 的柵欄,從左到右高度依次是 h i 你需要對這個柵欄粉刷油漆,每次你可以粉刷一行或者一列。問最少粉刷幾次,可以給所有柵欄上漆。不能多刷 input 第一行包含乙個整數,表示柵欄的長度。接下來的一行,包含 n 個數 n 5000 依次表示 h i 0 h i 10 output 輸...