2017 華東師範大學網賽 F 麗娃河的狼人傳說

2021-08-01 00:25:11 字數 1529 閱讀 2472

麗娃河是華師大著名的風景線。但由於學校財政緊缺,麗娃河邊的路燈年久失修,一到晚上就會出現走在河邊要打著手電的情況,不僅非常不方便,而且影響安全:已經發生了大大小小的事故多起。

方便起見,麗娃河可以看成是從 1 到 n 的一條數軸。為了美觀,路燈只能安裝在整數點上,每個整數點只能安裝一盞路燈。經專業勘測,有 m 個區間特別容易發生事故,所以至少要安裝一定數量的路燈,

請問至少還要安裝多少路燈。

input

第一行乙個整數 t (1≤t≤300),表示測試資料組數。

對於每組資料:

•第一行三個整數 n,m,k (1≤n≤103,1≤m≤103,1≤k≤n)。

•第二行 k 個不同的整數用空格隔開,表示這些位置一開始就有路燈。

•接下來 m 行表示約束條件。第 i 行三個整數 li,ri,ti 表示:第 i 個區間 [li,ri] 至少要安裝 ti 盞路燈 (1≤li≤ri≤n,1≤ti≤n)。

output

對於每組資料,輸出 case x: y。其中 x 表示測試資料編號(從 1 開始),y 表示至少要安裝的路燈數目。如果無解,y 為 −1。

examples

input

3 5 1 3

1 3 5

2 3 2

5 2 3

1 3 5

2 3 2

3 5 3

5 2 3

1 3 5

2 3 2

4 5 1

output

case 1: 1

case 2: 2

case 3: 1

思路:對於這題,我們可以考慮用貪心來做(用vis來存路燈的放置情,0表示沒有燈,1表示有),首先對m個區間以右端點從小到大進行排序,然後遍歷一遍每個區間,算出還需放置的路燈數,然後從最右端開始依次向左放置,如果i位置上沒有路燈,sum++,然後將vis[i]標記為1表示放置乙個路燈。最後的結果即為sum。

**如下

#include

#include

#include

#include

#include

using

namespace

std;

int vis[1005];

struct node

e[1005];

bool cmp(node a,node b)

int flag=1;

for(int i=0;iscanf("%d%d%d",&e[i].l,&e[i].r,&e[i].cost);

if(e[i].r-e[i].l+1

//如果區間長度小於要求的路燈數,則無解

flag=0;

}sort(e,e+m,cmp);

printf("case %d: ",t);

if(flag==1)

j--;}}

printf("%d\n",sum);

}else

printf("-1\n");

}}

2017華東師範大學網路賽 C

time limit per test 1.5 seconds time limit all tests 10.0 seconds memory limit 256 megabytes 袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x 行第 y 列的位...

袋鼠媽媽找孩子 2017 華東師範大學網賽

思路 剛開始以為直接dfs搜尋到終點就可以了。我是剛開始將陣列全都定義為 然後深搜一條路。搜一步就將那一步改為 但是這樣會走出四個粘在一起的格仔,那裡就算四步,實際上那裡不是四步。後來想了下。得判斷什麼格仔可以走什麼格仔不可以走,乙個格仔只有到那裡的那個方向是 其餘三個都是 才能走。思路僅供參考不知...

2023年華東師範大學網路賽 E

e.黑心啤酒廠 time limit per test 1.0 seconds time limit all tests 1.0 seconds memory limit 256 megabytes accept submit 1184 4093 黑心啤酒廠為了讓大家買啤酒,會把一瓶酒設計成恰好能倒...