bzoj1293

[SCOI2009]生日礼物

小西有一条很长的彩带,彩带上挂着各式各样的彩珠。已知彩珠有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。

题解:包涵所有的就是算有进去以后的最后一个,和出来的第一个这个区间里找最短彩带长度就可以了。

 1 /*
 2 这道题,就是每个点都进入以后,然后就是都进入的最后一个点,
 3 这样就是最优解的一种情况,或者中间的第一个到达-1位为止,表示以后
 4 就没有这种颜色的珠子了。
 5 */
 6 #include<cstdio>
 7 #include<iostream>
 8 #include<algorithm>
 9 #include<cmath>
10 #include<cstring>
11 #define K 67
12 #define N 1000007
13 using namespace std;
14
15 int n,k,cnt,ans=1e9+7;
16 int head[K];
17 int next[N],v[N],a[N];
18
19 bool pan(int x)
20 {
21     int mx=0;
22     for (int i=1;i<=k;i++)
23     {
24         while (v[head[i]]>x)
25         {
26             if (next[head[i]]==-1) return 0;
27             head[i]=next[head[i]];
28         }
29         if (v[head[i]]<=x)mx=max(mx,x-v[head[i]]);
30     }
31     ans=min(ans,mx);
32     return 1;
33 }
34 int main()
35 {
36     memset(head,-1,sizeof(head));
37     scanf("%d%d",&n,&k);
38     for (int i=1;i<=k;i++)
39     {
40         int x,y;
41         scanf("%d",&x);
42         for (int j=1;j<=x;j++)
43         {
44             scanf("%d",&y);
45             v[++cnt]=y;
46             next[cnt]=head[i];
47             head[i]=cnt;
48             a[cnt]=y;
49         }
50     }
51     sort(a+1,a+cnt+1);
52     for (int i=cnt;i>=1;i--)
53         if (a[i]!=a[i+1]) if (!pan(a[i])) break;
54     printf("%d\n",ans);
55 }
时间: 2024-08-19 00:30:10

bzoj1293的相关文章

BZOJ1293: [SCOI2009]生日礼物

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1293 记录下每个点的颜色和上一个这一个颜色点的坐标,离散化之后枚举终点向前扫一遍.. #include<cstring> #include<iostream> #include<cstdio> #include<queue> #include<cmath> #include<algorithm> #define rep(i,l,r

bzoj1293题解

[题意分析] 给你一条有n个点的数轴,每个点属于一个种类,总共有k个种类.求一段最短的线段,使对于每个种类,这段线段上有至少一个点属于它. [算法分析] 1.对于50%的数据,N≤10000 对于每一个从左到右枚举的l,从左到右枚举r>=l并不断加入r号彩珠,直到满足条件为止,更新答案. 时间复杂度O(n2). 2.对于80%的数据,N≤800000 预处理k个种类的前缀和.对于每一个从左到右枚举的l,进行O(klog2n)的二分询问. 时间复杂度O(nklog2n) 3.对于100%的数据,1

【堆】bzoj1293 [SCOI2009]生日礼物

考虑poj3320尺取法的做法,与此题基本一样,但是此题的 位置 的范围到2^31 尺取法不可. 将每种珠子所在的位置排序. 每种珠子要维护一个指针,指到已经用到这个种类的哪个珠子. 所以尺取法用堆优化,每次从堆中取出最小的,相当于尺取法的头指针向后移动. 然后从每种珠子里向后取出一个位置(指针++)(已经排过序,是单调递增的),加进堆. 再从每种其他的珠子里 把 在 新加入的珠子位置之前的 位置全都加进堆. 更新答案. 直到某种类珠子已经全用完. 由于每个位置可能有很多珠子,插入堆时要用一个二

【BZOJ1293】【SCOI2009】生日礼物 单调性

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46376019"); } 题解: 首先我们把所有元素排一下序,然后枚举最小值,那么最大值是非严格单调上升的,就是一个珠子换成其后第一个的同颜色珠子时,将更新一下最大值,而最小珠子则刚好是其后第一个(反之则有空下来的永远

刷题总结——生日礼物(bzoj1293单调队列)

题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. Input 第一行包含两

bzoj1293[SCOI2009]生日礼物 尺取法

1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2838  Solved: 1547[Submit][Status][Discuss] Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小

BZOJ1293:[SCOI2009]生日礼物——题解

http://www.lydsy.com/JudgeOnline/problem.php?id=1293 https://www.luogu.org/problemnew/show/P2564#sub 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中

东北育才10天大总结

老师们 Scanf的嗓门照例是最大的.恩. “我是山里的孩子……小的时候背书,整个山头都听得见……” 有一个哈师大附中的竞赛教练很……怎么说呢?接地气好了. Scanf说东北人很耿直,似乎确实是这样的.衡水的教练早就被遣返了…… “他啊,监考去了!” 虽然他不在,但还是不还手机.让衡水的人天天在电脑上颓废…… Scanf不在,你看我们就很老实.他到处“乱”玩,甚至跑到了国境线边,连火车票都忘了买,坐高铁去,乘绿皮火车回,路过长白山就去玩了一趟,结果暴风雪逼得他去吃“暴辣”的烤鱿鱼. “我看<三八

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734