【问题描述】

经过三十多个小时的长途跋涉,小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模拟赛】种花相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  5. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  6. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

  7. NOIP 模拟赛 长寿花 题解

    NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...

  8. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  9. NOIP模拟赛套路技巧经验总结

    前言 还有2天就NOIP了,之前做了这么多场模拟赛,是时候拿出来总结一下, 算是给自己一针强心剂. 列表 从最近的考试总结起(个人认为的重点,可能有重复,仅供参考): (转化很重要,一定要简化问题过后 ...

  10. 【NOIP 模拟赛】平均数 涂色游戏 序列题解

    吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...

最新文章

  1. Python 标准库之 subprocesss
  2. python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
  3. mysql创建表时遇到的问题_MySQL语言创建表时遇到了问题,请问我错在哪里了?...
  4. Linux下配置DNS服务器之一--Master服务器
  5. 对pca降维后的手写体数字图片数据分类_机器学习:数据的准备和探索——特征提取和降维...
  6. php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
  7. [剑指offer][JAVA]面试题第[12]题[矩阵的路径][DFS][剪枝]
  8. 数据结构--链表--单链表归并排序mergesort
  9. 模板匹配中差值的平方和(SSD)与互相关准则的关系
  10. 四.开发记录之ubuntu系统安装ROS和开发环境
  11. Spring Boot整合Swagger3注解@ApiImplicitParam的paramType属性为“path“
  12. python创建对象教程_python源码学习 之 对象创建和对象的行为
  13. token干什么用_什么是token
  14. 使用PHP编写的基于MySQL博客模板-可直接使用
  15. 什么是开发平台? 几句话就让你明白!
  16. 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
  17. H.264基础知识总结
  18. 宝马与F团合作能否再造营销奇迹?
  19. [Chromium中文文档]Chrom{e,ium}{,OS}中的硬件视频加速
  20. 从代理模式再出发!Proxy.newProxyInstance的秘密

热门文章

  1. 证监会将开启私募机构新三板做市试点
  2. 机器学习分类模型评价指标和方法
  3. Mongoose 参考手册
  4. crm创建启用停用用户
  5. React Router最新指南与异步加载实践
  6. 解决 U盘安装Windows Server 2012 R2 报错 Windows 无法打开所需的文件 Sources\install.wim...
  7. Gstreamer官方教程汇总2---GStreamer concepts
  8. LINUX开源监控平台Nagios(服务监控配置)
  9. 使Iframe的宽高自适应,并且兼容IE 和NC浏览器- -
  10. Spring Framework标记库初学指南