数据结构_sfdg(小F打怪)
问题描述
小 F 很爱打怪, 今天因为系统 bug, 他提前得知了 n 只怪的出现顺序以及击
倒每只怪得到的成就值 ai。 设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒
钟出现一只新怪且没被击倒的旧怪消失。 小 F 决定发动一次技能, 他的技能最多
维持 k 秒, 他希望获得最大的成就值,请你帮他计算他发动技能的时间 l 和技能
结束时间 r(r-l+1<=k)。 当存在多种方案使得成就值最大时,选择技能发动时间 l
最小的方案, 再选择技能持续时间 r-l+1 最小的方案。
★数据输入
输入第一行为两个正整数 n(1<=n<=100000), k(0<k<=n),表示出现 n 只怪,
小 F 的技能最多维持 k 秒。
输入第二行为 n 个整数,表示小 F 击倒第 i 秒钟出现的怪能给有获得的成就
值 ai(-1000<=a[i]<=1000)。
★数据输出
输出为一行三个数。第一个数为可获得的最大成就值,第二个数为技能发动
时间 l,第三个数为技能结束时间 r。
| 输入示例 | 输出示例 |
| 6 3 -1 2 -6 5 -5 6 |
6 4 6 |
| 输入示例 | 输出示例 |
| 5 5 -1 -1 -1 -1 -1 |
-1 1 1 |
思路
双端队列
code
#include <stdio.h>
#include <stdlib.h> struct Node
{
int data;
int index;
}; int main()
{
int i;
int n, k;
scanf("%d %d", &n, &k);
int *p = (int *)malloc(sizeof(int)*(n + ));
p[] = ;
for (i = ; i <= n; i++)
{
scanf("%d", p + i);
p[i] += p[i - ];
} int max_l = , max_r = , max_hap = p[];
Node *que = (Node *)malloc(sizeof(Node)*(n+));
int l=,r=;
que[r].data = p[];
que[r].index = ; for (i = ; i <= n; i++)
{
while (l<=r && i - que[l].index > k)
{
l++;
} int val = p[i] - que[l].data;
if (val > max_hap)
{
max_hap = val;
max_l = que[l].index + ;
max_r = i;
} while (l<=r && p[i]<que[r].data)
{
r--;
}
r++;
que[r].data = p[i];
que[r].index = i;
}
printf("%d %d %d\n", max_hap, max_l, max_r); free(p);
free(que); return ;
}
数据结构_sfdg(小F打怪)的更多相关文章
- 算法与数据结构实验题 4.2 小 F 打怪
★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...
- 「题解」小 R 打怪兽 monster
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目描述 小 R 最近在玩一款游戏.在游戏中,小 R 要依次打 \(n\) 个怪兽,他需要打败至少 \(k\) 个怪兽才能通关.小 ...
- LuoguP5139 z小f的函数 题解
Content 给定 \(T\) 个二次函数 \(y=ax^2+bx+c\),有若干次操作,有一个操作编号 \(p\),保证仅为以下这五种: 操作 \(1\):给定 \(k\),将函数图像向上移动 \ ...
- [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)
单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...
- 清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)
时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 这个故事是关于小F的,它有一个怎么样的故事呢. 小F是一个田径爱好者,这天它们城市里正在 ...
- [转]lua数据结构--闭包
前面几篇文章已经说明了Lua里面很常用的几个数据结构,这次要分享的也是常用的数据结构之一 – 函数的结构.函数在Lua里也是一种变量,但是它却很特殊,能存储执行语句和被执行,本章主要描述Lua是怎么实 ...
- 泛函编程(22)-泛函数据类型-Monoid In Action
在上一节我们讨论了Monoid的结合性和恒等值的作用以及Monoid如何与串类元素折叠算法相匹配.不过我们只示范了一下基础类型(primitive type)Monoid实例的应用,所以上一节的讨论目 ...
- memcached缓存知识简单梳理
memcached工作原理基本概念:slab,page,chunk.slab,是一个逻辑概念.它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同s ...
- memcached工作原理与优化建议
申明,本文为转载文:http://my.oschina.net/liuxd/blog/63129 工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcac ...
随机推荐
- Android Volley完全解析(三),定制自己的Request
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17612763 经过前面两篇文章的学习,我们已经掌握了Volley各种Request ...
- 软件架构设计 ADMEMS方法体系
ADMEMS是Architecture Design Method has been Extended to Method System的简称,是由CSAI顾问团架构设计专家组于2009年11月在第六 ...
- 序章:为什么学习使用kotlin、及kotlin的一些碎碎念
为什么使用kotlin? 当然是因为项目目前的开发语言是kotlin啊! 一方面是想能够尽快适应项目,另一方面,kotlin这门语言独特的语法,确实很吸引我,也让我意识到java代码在某些程度上的繁琐 ...
- qt在linux下使用open,write,close等文件操作
正常在linux下使用的文件操作函数为: #include <fcntl.h>fd = open(“path”,O_RDWR|O_NONBLOCK); 但是在qt中,需要使用: #incl ...
- 怎么让eclipse调试的时候不进入 class文件中去
Eclipse -> Window ->Preferences ->Java ->Debug "Suspend execution on uncaught excep ...
- java流。基础
总结:read()方法返回类型是int型??不知道该怎么用好循环> package com.da; import java.io.*; public class fgbv { public st ...
- 杂项:VS调试技巧之附加进程
ylbtech-杂项:VS调试技巧之附加进程 1. 摘录返回顶部 1. 用过VS一段时间的程序员们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动V ...
- iOS下拉图片放大
效果图 开始简单的代码过程 其实思路很简单 就是 让tableView偏移 一图片的高度,然后在把图片添加到tableView中,然后再监听didScrollView,在里面改变图片的frame - ...
- Windows下.svn文件夹的最简易删除方法(附linux)
如果想删除Windows下的.svn文件夹,通过手动删除的渠道是最麻烦的,因为每个文件夹下面都存在这样的文件.下面是一个好办法:建立一个文本文件,取名为kill-svn-folders.reg(扩展名 ...
- Stun方式的P2P实现原理(转)
转帖地址:http://www.cppblog.com/peakflys/archive/2013/01/25/197562.html 二.STUN方式的P2P实现 STUN是RFC3489规定的 ...