【NOIp模拟赛】种花
【问题描述】
经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场——南山南中学。一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来。
他发现花的摆放竟有如此奥秘:圆形广场共有 N个种花的位置,顺时针编号1到N。并且每个位置都有一个美观度,如果在这里种花就可以得到这的美观度。但由于地处南山土壤肥力欠佳,两株花不能种在相邻的位置(1号和N号也算相邻位置)。校方一共给了 M株花,经过园丁的精妙摆放,才能如此吸引小D。所以现在小D也想知道应该如何摆这 N株花。
【输入格式】
从文件 flower.in 中读入数据。
输入第一行包含两个整数N,M 。
接下来一行包含N个正整数,依次描述美观度。
【输出格式】
输出到文件 flower.out 中。
输出一个整数,表示最佳植树方案可以得到的美观度。如果无解输出“Error!”,不包含引号。
【样例输入】
7 3
1 2 3 4 5 6 7
【样例输出】
15
【数据规模与约定】
对于50%的数据满足。
对于100%的数据满足,。
分析
贪心+堆
我们先把所有点放入堆中,每次取出美观度最大的。如果它不是最优解,那么它旁边的两个肯定是。
这个可以用反证法来证明,如果它旁边的两个不是最优解,那么肯定可以选它,因为他是最大的。
如果他旁边有一个是最优解一个不是最优解,这种情况肯定是不存在的,设它左边的不是最优解,左边肯定不影响,它现在是美观度最大的,选右边的还不如选它。
每次取出最大之后讲
V=Vpre+Vnext−V加入入堆,最后删掉Pre和Next,每次用堆维护,取出最大值即可。
上面的公式是很巧妙的,也就是说如果它不是最优解还可以再选一次,只不过这次会把之前的v给减掉,加上它两边的和,而相比之前的那一次正好选了两次。
代码
手打的堆有点长不过速度比STL快。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=200000+5; inline int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f; } int n,m,heap_size,ans; int a[maxn],nxt[maxn],pre[maxn],heap[maxn]; bool vis[maxn]; inline void put(int x) {int now,nxt;heap[++heap_size]=x;now=heap_size;while(now>1){nxt=now>>1;if(a[heap[now]]<=a[heap[nxt]]) break;int t=heap[now]; heap[now]=heap[nxt]; heap[nxt]=t;now=nxt;} } inline int get() {int now=1,nxt,res=heap[1];heap[1]=heap[heap_size--];while((now<<1)<=heap_size){nxt=now<<1;if(nxt<heap_size&&a[heap[nxt+1]]>a[heap[nxt]]) nxt++;if(a[heap[now]]>=a[heap[nxt]]) break;int t=heap[now];heap[now]=heap[nxt]; heap[nxt]=t;now=nxt;}return res; } int main() {freopen("flower.in","r",stdin);freopen("flower.out","w",stdout);n=read(); m=read();if((m<<1)>n) { printf("Error!"); return 0;}for(int i=1;i<=n;i++) { a[i]=read(); put(i);}for(int i=1;i<n;i++) nxt[i]=i+1;for(int i=2;i<=n;i++) pre[i]=i-1;nxt[n]=1; pre[1]=n;for(int i=1;i<=m;i++){int x=get();while(vis[x])x=get();ans+=a[x];a[x]=a[pre[x]]+a[nxt[x]]-a[x];vis[pre[x]]=1; vis[nxt[x]]=1;put(x);nxt[x]=nxt[nxt[x]];pre[x]=pre[pre[x]];pre[nxt[x]]=x;nxt[pre[x]]=x;}printf("%d\n",ans);return 0; }
转载于:https://www.cnblogs.com/huihao/p/7445721.html
【NOIp模拟赛】种花相关推荐
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
[WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...
- NOIP 模拟赛 长寿花 题解
NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...
- 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)
[题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...
- NOIP模拟赛套路技巧经验总结
前言 还有2天就NOIP了,之前做了这么多场模拟赛,是时候拿出来总结一下, 算是给自己一针强心剂. 列表 从最近的考试总结起(个人认为的重点,可能有重复,仅供参考): (转化很重要,一定要简化问题过后 ...
- 【NOIP 模拟赛】平均数 涂色游戏 序列题解
吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...
最新文章
- Python 标准库之 subprocesss
- python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
- mysql创建表时遇到的问题_MySQL语言创建表时遇到了问题,请问我错在哪里了?...
- Linux下配置DNS服务器之一--Master服务器
- 对pca降维后的手写体数字图片数据分类_机器学习:数据的准备和探索——特征提取和降维...
- php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
- [剑指offer][JAVA]面试题第[12]题[矩阵的路径][DFS][剪枝]
- 数据结构--链表--单链表归并排序mergesort
- 模板匹配中差值的平方和(SSD)与互相关准则的关系
- 四.开发记录之ubuntu系统安装ROS和开发环境
- Spring Boot整合Swagger3注解@ApiImplicitParam的paramType属性为“path“
- python创建对象教程_python源码学习 之 对象创建和对象的行为
- token干什么用_什么是token
- 使用PHP编写的基于MySQL博客模板-可直接使用
- 什么是开发平台? 几句话就让你明白!
- 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
- H.264基础知识总结
- 宝马与F团合作能否再造营销奇迹?
- [Chromium中文文档]Chrom{e,ium}{,OS}中的硬件视频加速
- 从代理模式再出发!Proxy.newProxyInstance的秘密
热门文章
- 证监会将开启私募机构新三板做市试点
- 机器学习分类模型评价指标和方法
- Mongoose 参考手册
- crm创建启用停用用户
- React Router最新指南与异步加载实践
- 解决 U盘安装Windows Server 2012 R2 报错 Windows 无法打开所需的文件 Sources\install.wim...
- Gstreamer官方教程汇总2---GStreamer concepts
- LINUX开源监控平台Nagios(服务监控配置)
- 使Iframe的宽高自适应,并且兼容IE 和NC浏览器- -
- Spring Framework标记库初学指南