4071 Apio2015 巴鄰旁之橋

2022-06-03 11:30:15 字數 2022 閱讀 4447

一條東西走向的穆西河將巴鄰旁市一分為二,分割成了區域 a 和區域 b。

每一塊區域沿著河岸都建了恰好 1000000001 棟的建築,每條岸邊的建築都從 0 編號到 1000000000。相鄰的每對建築相隔 1 個單位距離,河的寬度也是 1 個單位長度。區域 a 中的 i 號建築物恰好與區域 b 中的 i 號建築物隔河相對。

城市中有 n 個居民。第 i 個居民的房子在區域 pi 的 si 號建築上,同時他的辦公室坐落在 qi 區域的 ti 號建築上。乙個居民的房子和辦公室可能分布在河的兩岸,這樣他就必須要搭乘船隻才能從家中去往辦公室,這種情況讓很多人都覺得不方便。為了使居民們可以開車去工作,**決定建造不超過 k 座橫跨河流的大橋。

由於技術上的原因,每一座橋必須剛好連線河的兩岸,橋梁必須嚴格垂直於河流,並且橋與橋之間不能相交。當**建造最多 k 座橋之後,設 di 表示第 i 個居民此時開車從家裡到辦公室的最短距離。請幫助**建造橋梁,使得 d1+d2+⋯+dn 最小。

輸入的第一行包含兩個正整數 k 和 n,分別表示橋的上限數量和居民的數量。

接下來 n 行,每一行包含四個引數:pi,si,qi 和 ti,表示第 i 個居民的房子在區域 pi 的 si 號建築上,且他的辦公室位於 qi 區域的 ti 號建築上。

輸出僅為一行,包含乙個整數,表示 d1+d2+⋯+dn 的最小值。

1 5b 0 a 4

b 1 b 3

a 5 b 7

b 2 a 6

b 1 a 7

24子任務

所有資料都保證:pi 和 qi 為字元 「a」 和 「b」 中的乙個, 0≤si,ti≤1000000000,同一棟建築內可能有超過 1 間房子或辦公室(或二者的組合,即房子或辦公室的數量同時大於等於 1)。

子任務 1 (8 分)

k=11≤n≤1000

子任務 2 (14 分)

k=11≤n≤100000

子任務 3 (9 分)

k=21≤n≤100

子任務 4 (32 分)

k=21≤n≤1000

子任務 5 (37 分)

k=21≤n≤100000

題解:code:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 typedef long

long

int64;

8const

int maxn=200005;9

char c1[2],c2[2

];10

intk,n,l,r,cnt,tot,a[maxn],b[maxn];

11int64 ans;

12struct

datalist[maxn];

15bool cmp(const data &x,const data &y)

16struct

seg26

void modify(int x,int v)

27int query(int

rank)

34return

l;35

}36 }t[2

];37

void

prepare()44}

45int64 solve()

60return

res;61}

62int

main()

71 sort(a+1,a+tot+1

);72

int res=a[tot/2

];73

for (int i=1;i<=tot;i++) ans+=abs(a[i]-res);

74 printf("

%lld\n

",ans);75}

76else;82

}83 printf("

%lld\n

",ans+solve());84}

85return0;

86 }

BZOJ4071 Apio2015 巴鄰旁之橋

首先對於家和公司在同一側的預處理掉,這樣就只剩家和公司不在同一側的情況了。if k 1 ans abs x pos abs y pos 注意到與x,y是否在兩側無關,所以用經典的中位數處理思想sort一遍取中位數貪心即可。else 好久不寫splay,練習了一發 include include in...

BZOJ4071 APIO2015 八鄰旁之橋

bzoj4071 apio2015 八鄰旁之橋 這個題也變成了許可權題,不是很懂為什麼。反正沒錢氪金。這裡附上洛谷的題面 洛谷p3644 apio2015 八鄰旁之橋 一條東西走向的穆西河將巴鄰旁市一分為二,分割成了區域 aa 和區域 bb。每一塊區域沿著河岸都建了恰好 1000000001 棟的建...

BZOJ 4071 巴鄰旁之橋

bzoj 4071傳送門 首先算出能提前算的貢獻 k 1 肯定選中間的點,小學數學 k 2 對於每對 x,y 一定選離 x y 2 近的橋 也就是說將 x,y 按 x y 2 的值排序後一定恰有乙個分割點使得兩邊選擇不同的橋!考慮如何如何快速列舉所有分割點時的答案 需要支援插入 刪除 求中位數及兩邊...