1. 程式人生 > >【BZOJ 1293】【SCOI 2009】生日禮物

【BZOJ 1293】【SCOI 2009】生日禮物

Description

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

Input

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

Output

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

Sample Input

6 3
1 5
2 1 7
3 1 3 8

Sample Output

3

HINT

有多種方案可選,其中比較短的是1~5和5~8。後者長度為3最短。
【資料規模】
對於50%的資料, N≤10000;
對於80%的資料, N≤800000;
對於100%的資料,1≤N≤1000000,1≤K≤60,0≤彩珠位置<2^31。

題解

列舉每一個顏色最後一個位置,找到其他顏色離這最近的最大值,在找出所有值中的最小值。
用單調佇列來維護。好像是這麼叫的。

程式碼

#include<cstdio>
#include<cstring> #include<algorithm> using namespace std; #define N 1000010 int n,k,cnt,ans = 0x7fffffff; int next[N],a[N],v[N]; int head[65]; bool jud(int x) { int mx = 0; for(int i = 1;i <= k;i++) { while(v[head[i]] > x) { if(!next[head[i]]) return
false; head[i] = next[head[i]]; } if(v[head[i]] <= x) mx = max(mx, x - v[head[i]]); } ans = min(ans,mx); return true; } int main() { int m,y; scanf("%d%d",&n,&k); cnt = 0; for(int i = 1;i <= k;i++) { scanf("%d",&m); for(int j = 1;j <= m;j++) { scanf("%d",&y); v[++cnt] = y; next[cnt] = head[i]; head[i] = cnt; a[cnt] = y; } } sort(a+1,a+cnt+1); for(int i = cnt;i > 0;i--) if(a[i] != a[i+1]) if(!jud(a[i])) break; printf("%d\n",ans); return 0; }

相關推薦

BZOJ 1293SCOI 2009生日禮物

Description 小西有一條很長的綵帶,綵帶上掛著各式各樣的彩珠。已知彩珠有N個,分為K種。簡單的說,可以將綵帶考慮為x軸,每一個彩珠有一個對應的座標(即位置)。某些座標上可以沒有彩珠,但多個彩珠也可以出現在同一個位置上。 小布生日快到了,於是小西打算剪

BZOJ- 1293生日禮物 (尺取法)

小西有一條很長的綵帶,綵帶上掛著各式各樣的彩珠。已知彩珠有N個,分為K種。簡單的說,可以將綵帶考慮為x軸,每一個彩珠有一個對應的座標(即位置)。某些座標上可以沒有彩珠,但多個彩珠也可以出現在同一個位置上。 小布生日快到了,於是小西打算剪一段綵帶送給小布。為了讓禮物綵帶足夠漂亮,小西希望這一段綵帶

bzoj 1293[SCOI2009]生日禮物(亂搞|單調佇列)

1293: [SCOI2009]生日禮物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2025  Solved: 1088 [Submit][Status][Discuss] Description 小西有一條很長的綵

bzoj 1293[SCOI2009] 生日禮物 指標維護佇列

把所有的點從小到大排序以後,維護 l 和 r 指標,先讓 r++ 直到滿足題目要求,然後再移動 l 指標 直到不能滿足條件為止,但是每一次保證 l 的端點處沒有相同的顏色(貪心,要使答案最下),然後每

BZOJ 2753 滑雪與時間膠囊

geo discuss long tex algo 而且 margin bsp letter Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2843 Solved: 993[Submit][Status][Discuss]

BZOJ 1297」「SCOI 2009」迷路「矩陣乘法」

per 題解 algo code namespace sin 有向圖 line [1] 題意 邊權\(w \in [1, 9]\)的\(n\)個結點的有向圖,圖上從\(1\)到\(n\)長度為\(d\)的路徑計數,\(n \leq 10\). 題解 如果邊權為\(1\)很經

最小樹形圖(奇怪的kruskal)SCOI 2012bzoj 2753滑雪與時間膠囊

方案 track solved views end cmp ren scoi2012 ext 2753: [SCOI2012]滑雪與時間膠囊 Time Limit: 50 Sec Memory Limit: 128 MB Submit: 1621

BZOJ2038: [2009國家集訓隊]小Z的襪子(hose)

detail log net 施工 pop href .net tails zoj 【算法】莫隊 【題解】 BZOJ 2038 2009國家集訓隊 小Z的襪子(hose) 莫隊算法 莫隊……講稿? 施工中……【BZOJ】2038: [2009國家集訓隊]小Z的襪子(hose

bzoj 1293: [SCOI2009]生日禮物單調隊列

發現 \n for lse bzoj n+1 ++ sin date 一開始用了復雜度看起來對實則常數巨大的線段樹+hash……後來發現隊列就行…… 把珠子按位置排序,然後用隊列維護一段,枚舉右端點更新答案即可 #include<iostream> #inclu

BZOJ 1801AHOI 2009中國象棋(遞推DP)

(誰告訴我是狀壓的????) 一行/列最多能放三個炮 30分是讓你爆搜的 50分是讓你狀壓的 假設有8列 dp[i][j]表示到第i行且前面列的狀態為j (沒有/有一個/有兩個炮) 然後刷表 100分其實就是在50分的基礎上修改了一點 因為發現 並不需要準確的知道之前擺放情況到底是什麼樣子的 於是dp[i][

BZOJ 1854SCOI 2010遊戲並查集 & 二分圖匹配

Description lxhgww最近迷上了一款遊戲,在遊戲裡,他擁有很多的裝備,每種裝備都有2個屬性,這些屬性的值用[1,10000]之間的數表示。當他使用某種裝備時,他只能使用該裝備的某一個屬性。並且每種裝備最多隻能使用一次。 遊戲進行到最後,lxhgw

BZOJ 2288 POJ Challenge生日禮物(貪心+優先隊列)

ace urn ons target challenge pri 最大 font return 【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2288 【題目大意】   給出一列數,求最多取m段

BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 亂發節

silver trac mem status add span %d php bmi 1660: [Usaco2006 Nov]Bad Hair Day 亂發節 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 678

BZOJ3971 [WF2013]Матрёшка

數組 .html ide html cstring str n) div x優化 【算法】區間DP 【題解】 參考寫法:BZOJ 3971 Матрёшка 解題報告 第二個DP可以預處理mex優化到O(nM+n2),不過我懶…… 第一個DP有另一種寫法:不預處理,在一個n

BZOJ2049 [Sdoi2008]Cave 洞穴勘測

.com oid pre sdoi2008 print reserve mes tdi down 【算法】Link-Cut Tree 【題解】lct 不是很懂你們會壓常數的>_<! #include<cstdio> #include<alg

BZOJ3676 [Apio2014]回文串

esp ret 結點 += lap first trees db4 lld 【算法】回文樹 【題解】建回文數,然後一個回文子串出現的次數就是結點被訪問的次數以及能包含它的結點被訪問的次數。 根據fail樹反向建新樹,那麽答案就是結點所在子樹的權值和(權值就是結點被訪問次數)

BZOJ1130 N的階乘的長度 V2(斯特林近似)

n) ges src algo span ace pan nbsp closed 【算法】數學 【題解】斯特林公式: #include<cstdio> #include<algorithm> #include<cmath> usin

BZOJ2466[中山市選2009]樹 樹形DP

消元 滿足 cpp ret 之前 中山市選 所有 不理解 高斯消元 【BZOJ2466】[中山市選2009]樹 Description 圖論中的樹為一個無環的無向圖。給定一棵樹,每個節點有一盞指示燈和一個按鈕。如果節點的按扭被按了,那麽該節點的燈會從熄滅變為點亮(

bzoj 2002彈飛綿羊

getchar() esp getchar main output time 需要 top nbsp Description 某天,Lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,Lostmonkey在地上沿著一

bzoj 3675[Apio2014]序列分割

fde 操作 using con 列分割 bzoj mes input 遊戲 Description 小H最近迷上了一個分隔序列的遊戲。在這個遊戲裏,小H需要將一個長度為n的非負整數序列分割成k+1個非空的子序列。為了得到k+1個子序列,小H需要重復k次以下的步驟: 1.小