bzoj 1293 贪心
首先我们可以将这道题看成一个数轴,数轴其中的某些点存在一些颜色,我们要选取最短的一段,使这段存
在所有颜色,那么我们使用指针i,j表示在j-i位置中包含的颜色,那么初值是0,0,我们先i++,同时添加i位置
的颜色,直到j-i中存在所有颜色,然后j++,同时删除颜色,直到不存在所有颜色,然后更新答案,重复这过程,
因为i,j只增不减,所以是o(n)的,但是要离散化,还是nlogn的,也算是贪心吧
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
n, k :longint;
a, c, size :array[..] of longint;
flag :array[..] of longint;
tot :longint;
l :longint;
pre, other :array[..] of longint;
last :array[..] of longint; function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end; procedure swap(var a,b:longint);
var
c :longint;
begin
c:=a; a:=b; b:=c;
end; procedure connect(x,y:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
end; procedure qs(low,high:longint);
var
i, j :longint;
xx :longint;
begin
i:=low; j:=high; xx:=a[(i+j) div ];
while i<j do
begin
while a[i]<xx do inc(i);
while a[j]>xx do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
swap(c[i],c[j]);
inc(i); dec(j);
end;
end;
if i<high then qs(i,high);
if j>low then qs(low,j);
end; procedure init;
var
i, j :longint;
x, y :longint; begin
read(n,k);
for i:= to k do
begin
read(x);
for j:= to x do
begin
read(y);
inc(tot);
a[tot]:=y;
c[tot]:=i;
end;
end;
qs(,tot);
end; procedure main;
var
i, j :longint;
cur :longint;
ans, sum :longint;
q, p :longint; begin
tot:=;
cur:=-;
for i:= to n do
begin
if a[i]<>cur then
begin
inc(tot);
size[tot]:=a[i];
cur:=a[i];
connect(tot,c[i]);
end else
begin
connect(tot,c[i]);
end;
end;
ans:=maxlongint;
i:=; j:=; sum:=;
fillchar(flag,sizeof(flag),);
while i<tot do
begin
while sum<k do
begin
inc(i);
q:=last[i];
while q<> do
begin
p:=other[q];
if flag[p]= then
begin
flag[p]:=;
inc(sum);
end else inc(flag[p]);
q:=pre[q];
end;
if i>tot then break;
end;
if i>tot then break;
while sum>=k do
begin
inc(j);
q:=last[j];
while q<> do
begin
p:=other[q];
dec(flag[p]);
if flag[p]= then dec(sum);
q:=pre[q];
end;
if j>tot then break;
end;
ans:=min(ans,size[i]-size[j]);
end;
writeln(ans);
end; begin
init;
main;
end.
bzoj 1293 贪心的更多相关文章
- [BZOJ 1293] 生日礼物
Link: BZOJ 1293 传送门 Solution: 这题直接上尺取法就行了吧 先将每种颜色第一个放入优先队列,用$mx$维护当前的末尾位置 每次取出第一个颜色,更新答案.将其下一个放入队列中去 ...
- bzoj 1193 贪心
如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...
- bzoj 2697 贪心
就贪心就行了,首先可以看成n个格子,放物品,那么 一个物品假设放3个,放在1,k,n处,那么价值和放在1,n 是一样的,所以一个物品只放两个就行了,价值大的应该尽量放 在两边,那么排序之后模拟就行了 ...
- bzoj 3037 贪心
我们可以贪心的分析,每个点的入度如果是0,那么这个点不可能 被用来更新答案,那么我们每次找入度为0的点,将他去掉,如果他连的 点没有被更新过答案,那么更新答案,去掉该点,环的时候最后处理就行了 /** ...
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1383[Submit][Stat ...
- [bzoj 1293] [SCOI2009] 生日礼物
传送门(bzoj) 传送门(luogu) 题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应 ...
- bzoj 1193 贪心+bfs
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2015 Solved: 914[Submit][Statu ...
- bzoj 1899 贪心+dp
思路:这个贪心排顺序我居然没看出来. 吃饭时间长的在前面, 用反证法很容易得出. 剩下的就是瞎dp啦. #include<bits/stdc++.h> #define LL long lo ...
- 【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分
题目传送门:这里是萌萌哒传送门(>,<) 啊♀,据说这题有个完全贪心的做法,但是要维护太多东西好麻烦的(>,<),于是就来口胡一发三分的做法. 思路很简单,假设我指定了一个x, ...
随机推荐
- JDBC剖析篇(1):java中的Class.forName()
一.Class.forName() 在Java中我们一般用下面这样的语句来连接数据库(以MySQL为例) Class.forName("com.mysql.jdbc.Driver" ...
- jmeter无法启动的解决办法
jmeter下载地址: 链接: https://pan.baidu.com/s/15YhiPH-kNVxISEZ4Mxf_WA 提取码: 25sv jdk 8.0 下载地址: 链接: http ...
- centos7使用Gogs搭建Git服务器
一.初次接触Gogs,记录一下搭建过程 二.平台环境 Linux: CentOS7.5.1804 MySQL: 5.6.35 安装步骤: linux服务器新建git用户: 下载.解压gogs安装包: ...
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
- 机器视觉必知-GenICam相机通用接口标准
机器视觉必知-GenICam相机通用接口标准 GenICam(相机通用接口): 一种通用软件接口 通用相机接口标准 目前机器视觉行业所使用的相机几乎均以相同方式来进行配置,即:---通过在注册表中的读 ...
- deeplearning.ai课程学习(1)
本系列主要是我对吴恩达的deeplearning.ai课程的理解和记录,完整的课程笔记已经有很多了,因此只记录我认为重要的东西和自己的一些理解. 第一门课 神经网络和深度学习(Neural Netwo ...
- hibernate和mybatis的之CRUD封装差别
hibernate和mybatis的之CRUD封装差别 以下讲的是基于MVC三层架构. 由于设计架构的差别,hibernate在实际编程中可以把基础的CRUD封装,比如BaseDao类.其它类只要去继 ...
- 文件特殊权限:SUID,SGID,SBIT
我们之前认识的文件的权限仅局限于r,w,x,但如果我们执行命令“ll /tmp; ll /usr/bin/passwd”,会出现除了r,w,x之外的其他字母: 即出现了特殊权限(s跟t). [SetU ...
- Qscintilla2编译使用
Qscintilla2的下载地址: https://github.com/josephwilk/qscintilla https://riverbankcomputing.com/software/q ...
- EF 4.0 升级到 6.0 问题解决办法
1.工具->库程序包管理器-> 管理解决方案的Nuget 程序包 找到EntityFramework 管理,勾选把需要进入 EF6.0的 项目,进行升级.