1293 SCOI2009 生日禮物

2022-05-16 05:36:08 字數 1497 閱讀 3021

time limit: 10 sec  memory limit: 162 mb

submit: 3151  solved: 1743

[submit][status][discuss]

小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標(即位置)。某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。 小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物彩帶足夠漂亮,小西希望這一段彩帶中能包含所有種類的彩珠。同時,為了方便,小西希望這段彩帶盡可能短,你能幫助小西計算這個最短的長度麼?彩帶的長度即為彩帶開始位置到結束位置的位置差。

第一行包含兩個整數n, k,分別表示彩珠的總數以及種類數。接下來k行,每行第乙個數為ti,表示第i種彩珠的數目。接下來按公升序給出ti個非負整數,為這ti個彩珠分別出現的位置。

應包含一行,為最短彩帶長度。

6 31 5

2 1 7

3 1 3 8

3有多種方案可選,其中比較短的是1~5和5~8。後者長度為3最短。

【資料規模】

對於50%的資料, n≤10000;

對於80%的資料, n≤800000;

對於100%的資料,1≤n≤1000000,1≤k≤60,0≤彩珠位置<2^31。

先預處理一遍,按照彩珠位置順序進行排序

然後遍歷彩珠,當符合條件時,更新一次答案,刪取尾部的珠子,可以想象一條蚯蚓在蠕動

最壞情況下時間複雜度為o(nk),感覺是要tle的,但還是過了

1 #include2 #include3 #include4

using

namespace

std;56

#define ll long long

7const

int maxn=1000000+5;8

const

int inf=0x7fffffff;9

10struct

node

11e[maxn];

14int

node;

15int n,k,ans=inf;

16int t[65

];17

18bool

cmp(node a,node b)

1922

23bool

check()

2432

return

flag;33}

3435

intmain()36;

47}48}

49 sort(e+1,e+node+1

,cmp);

50int l=1,r=0;51

for(int i=1;i<=node;i++)

52while(e[l-1].x==e[l].x);59}

60}61 printf("

%d\n

",ans);

62return0;

63 }

1293 SCOI2009 生日禮物

題目鏈結 題目大意 數軸上有若干個彩色的點,求最短區間,使其包含所有顏色的點至少乙個 題解 做法挺多的,例如說堆,二分 我寫的大概是乙個叫尺取法的東西,就是維護兩個指標,表示區間的兩個端點,然後移動 感覺跟莫隊的維護方法差不多 我的收穫 get include include include usi...

1293 SCOI2009 生日禮物

昨天想了好久這個題,最後發現竟然已經ac過了,還是寒假ac的!真是。網上都是些動歸,堆什麼的解法,我是佇列。按位置排序,依次加入佇列。加入乙個元素後判斷,保證隊首顏色只有一種。runid user problem result memory time language code length sub...

BZOJ1293 SCOI2009 生日禮物

標籤 單調佇列 description 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標 即位置 某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物...