(紀中)1746 粉刷柵欄

2021-10-02 20:04:32 字數 1798 閱讀 8342

(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 輸...