Description

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

题解:

十分简单,独自想出来的.
题目中要求最短的一段区间,使得该区间有所有的色块种类.
考虑枚举右端点,设该区间左端点的色块为 $i$,那么 $i$ 一定是距离右端点最近的一个 $i$ ,即 $i$ 的位置是从右端点开始数起 $i$ 首次出现的位置.
证明:
如果不是最近的,那么可以将该区间缩短,因为 $i$ 在距离右端点更近的位置有替代者.
色块只有 60 个,考虑将坐标离散化暴力转移即可,途中顺便维护距离每一个坐标距离最远且第一次出现的距离,所有点中该值的最小值就是答案.

直接开数组会炸掉,滚动优化一下即可.

Code:

  1. #include<bits/stdc++.h>
  2. #define setIO(s) freopen(s".in","r",stdin)
  3. #define maxn 1010000
  4. #define inf 0x7fffffff
  5. using namespace std;
  6. void Min(int &a,int b)
  7. {
  8. if(b<a) a=b;
  9. }
  10. void Max(int &a,int b)
  11. {
  12. if(b>a) a=b;
  13. }
  14. struct Node
  15. {
  16. int id,d;
  17. Node(int a=0,int b=0):id(id),d(d){}
  18. }nodes[maxn];
  19. bool cmp(Node a,Node b)
  20. {
  21. return a.d<b.d;
  22. }
  23. int arr[maxn],lst[2][61];
  24. int main()
  25. {
  26. // setIO("input");
  27. int n,k,m,cnt=0;
  28. scanf("%d%d",&n,&k);
  29. for(int i=1;i<=k;++i)
  30. {
  31. int t,x;
  32. scanf("%d",&t);
  33. for(int j=1;j<=t;++j)
  34. {
  35. scanf("%d",&x);
  36. nodes[++cnt].id=i, nodes[cnt].d=x;
  37. }
  38. }
  39. sort(nodes+1,nodes+1+n,cmp);
  40. for(int i=1;i<=n;++i) arr[i]=nodes[i].d;
  41. for(int j=0;j<=60;++j) lst[0][j]=lst[1][j]=inf;
  42. for(int i=1;i<=n;++i)
  43. {
  44. nodes[i].d=lower_bound(arr+1,arr+1+n,nodes[i].d)-arr;
  45. }
  46. int ans=inf, cur=0;
  47. for(int i=1,j;i<=n;i=j+1)
  48. {
  49. j=i;
  50. int posl=nodes[i-1].d;
  51. int posc=nodes[i].d;
  52. int rec=0;
  53. while(nodes[j+1].d==nodes[i].d) ++j;
  54. for(int jj=i;jj<=j;++jj) lst[cur][nodes[jj].id]=0;
  55. for(int jj=1;jj<=k;++jj)
  56. {
  57. if(lst[cur^1][jj]!=inf)
  58. {
  59. Min(lst[cur][jj],lst[cur^1][jj]+arr[posc]-arr[posl]);
  60. }
  61. rec=max(rec,lst[cur][jj]);
  62. }
  63. for(int j=0;j<=60;++j) lst[cur^1][j]=inf;
  64. cur^=1;
  65. Min(ans,rec);
  66.  
  67. }
  68. printf("%d",ans);
  69. return 0;
  70. }

  

bzoj 1293: [SCOI2009]生日礼物 问题转化 + 性质分析 + 滚动数组优化的更多相关文章

  1. BZOJ 1293: [SCOI2009]生日礼物【单调队列】

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2534  Solved: 1383[Submit][Stat ...

  2. [bzoj 1293] [SCOI2009] 生日礼物

    传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...

  3. BZOJ 1293 SCOI2009 生日礼物 堆

    题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛 ...

  4. 1293: [SCOI2009]生日礼物

    1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1096  Solved: 584[Submit][Statu ...

  5. 1293: [SCOI2009]生日礼物 - BZOJ

    Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩 ...

  6. BZOJ 1108: [POI2007]天然气管道Gaz 性质分析_小结论_巧妙

    Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需要将中转 站和天然气井连接起来.每个中转站必须被连接到正好一个钻油井,反之亦然. M ...

  7. BZOJ 1112: [POI2008]砖块Klo Splay + 性质分析

    Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...

  8. bzoj 1106 [POI2007]立方体大作战tet 树状数组优化

    [POI2007]立方体大作战tet Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 821  Solved: 601[Submit][Status][ ...

  9. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    题目链接 dp进阶之CDQ分治优化dp. 前置技能:dp基本功底,CDQ分治,树状数组. 问题等价于求二维最长上升子序列,是一个三维偏序问题(时间也算一维). 设$dp[i]=(l,x)$为以第i枚导 ...

随机推荐

  1. Git学习总结(12)——多人开发 Git 分支管理详解

    1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿.在这一篇博客中我们来在大家讲解一下Git 分支管理,这可以说是Git的又一大特点.下面我们就来学习 ...

  2. web跨域通信问题解决

    Web页面的跨域问题产生原因是企图使用JS脚本读写不同域的JS作用域.问题根源来自JavaScript的同源策略:出于安全考虑,Javascript限制来自不同源的web页面JS脚本之间进行交互.否则 ...

  3. confluence中设置应用程序链接到jira

    有时需要在confluence中选中文本直接生成issue或story到jira里. 在"一般配置“->“应用程序链接”中创建即可.

  4. 大红数星星 图论 XD网络赛

    问题 A: 大红数星星 时间限制: 3 Sec  内存限制: 128 MB提交: 1066  解决: 67[提交][状态][讨论版] 题目描述 “三角形十分的美丽,相信大家小学就学过三角形具有稳定性, ...

  5. CGLib与JDK的动态代理

    一.CGLib 简单介绍 CGLib (Code Generation Library) 是一个强大的,高性能,高质量的Code生成类库. 它能够在执行期扩展Java类与实现Java接口. Hiber ...

  6. [Project]微信项目感悟

    一定要先考虑好可复用部分,可以复制粘贴的地方 一定要先想好了在动 前台不同插件之间的兼容性问题可能是dom加载顺序的问题,有的代码可能要卸载其中一个插件的某个事件里

  7. Oracle 使用sqlnet.ora/trigger限制/允许某IP或IP段访问指定用户

    Oracle 使用sqlnet.ora/trigger限制/允许某IP或IP段访问指定用户 学习了:http://blog.itpub.net/28602568/viewspace-2092858/ ...

  8. JPA相关注解

    JPA注解 一.基本注解 1.表相关   @Entity   仅仅要加了这个注解就具备了表和实体的映射关系,表名就是实体名   @Table(name="表名")    一般和实体 ...

  9. VMware workstation虚拟机不能联网解决方法

    以备后用. 第一步:先设置VMware的编辑——虚拟网络编辑器,启用VMnet8,NAT模式,如下图所示. 其实就是VMware默认的设置,无须更改,如果不小心改了,点击还原默认设置. 第二步:虚拟机 ...

  10. 多个submit

    <html><body> <form action="welcome.php" method="post">Name: &l ...