sdut 3774 烈焰风暴
来源:互联网 发布:nginx配置文件详解 编辑:程序博客网 时间:2024/04/19 19:09
烈焰风暴
Problem Description
烈焰风暴是游戏「魔兽争霸Ⅲ」中的一项技能,血魔法师召唤出一道灼热的火墙,给一定范围内的 6 个单位造成伤害,并在一定时间内对这些单位造成持续伤害 (快捷键 "F"),如图所示:
这里只是给大家科普一下,与本题的设定不同。
现在,一些小兵排列整齐以一条线的方式,通过传送门进攻你的大本营。
为了简化问题,我们假设烈焰风暴的作用范围是一个半径为 R 的圆(包括圆上的点),可以秒杀作用范围内的数量不限的小兵。所有小兵都在一条直线上,其位置以坐标的形式给出,并且给出烈焰风暴的作用半径以及释放一次技能所需要的魔法值 m,请你求出至少需要多少魔法才能杀死所有小兵。
Input
输入数据有多组(数据组数不超过 200),到 EOF 结束。
对于每组数据:
- 第 1 行先给出小兵数量 n (1 <= n <= 1000),半径 R (1 <= R <= 20) 和魔法值 m (1 <= m <= 100)。
- 第 2 行输入 n 个小兵的坐标 x (0 <= x <= 10000)。
输入数据均为整数,一行内的整数两两之间用空格隔开。
Output
在输出的最开始一行先输出 ”Good Luck” (无论几组数据它只在开头输出一次)。
对于每组数据,先输出 ”Case #i: ” (i 从 1 开始计数),表示当前是第几组数据,之后输出至少需要的魔法。
在所有数据都处理完后,输出一行 ”QAQ”。
上述输出均不包含引号。
Example Input
5 2 41 2 3 4 55 2 41 2 4 6 5
Example Output
Good LuckCase #1: 4Case #2: 8QAQ
Hint
Author
思路
不是很裸的贪心,我们尽可能得让圆覆盖到小兵(这不废话么),如图所示:
一个圆尽可能覆盖到一条直线上的所有点,那就是用它的直径去覆盖,这就转化为了区间覆盖问题,学过贪心的巨巨们应该知道怎么做了。但没学过的呢,那么请看下面:
经过上面的讲述大家也就明白这道题的意思就是如何用最少的线段去覆盖所有的点,首先,我们先让圆的左端覆盖到最左边的点,那么该点之后的2*R距离内就不需要另一个圆来覆盖,之后继续往后数。如果有点没有被覆盖到,那就只有再添加一条圆,该点仍然在圆的最左端,以此类推,每部分的局部最优递推到整体最优,这就是贪心。
示例程序#include <stdio.h>int main(){ int k=1,r,n,m,a[1000],i,i1,t,sum,pos; printf("Good Luck\n"); while(scanf("%d %d %d",&n,&r,&m)!=EOF) { sum=1; for(i=0;n>i;i++) { scanf("%d",&a[i]); } for(i=0;n>i;i++) { for(i1=0;n-i-1>i1;i1++) { if(a[i1]>a[i1+1]) { t=a[i1]; a[i1]=a[i1+1]; a[i1+1]=t; } } } pos=a[0]; for(i=1;n>i;i++) { if(a[i]-pos>2*r) { sum++; pos=a[i]; } } printf("Case #%d: %d\n",k,sum*m); k++; } printf("QAQ\n"); return 0;}
- sdut 3774 烈焰风暴
- 烈焰风暴
- 烈焰风暴
- 烈焰风暴
- 烈焰风暴
- 烈焰风暴 简单贪心
- 烈焰风暴-查找方式的小区别
- 烈焰
- 贪心——烈焰风暴(用最少的线段去覆盖最多的点)
- 烈焰红唇
- 远方的烈焰
- 制造烈焰飞腾效果
- 沙发风暴
- 金融风暴
- autorun风暴
- 解密风暴
- 技术风暴
- 头脑风暴!
- L1归一化和L2归一化范数的详解和区别
- 三大运营商2G—4G网络制式分别是什么
- UBOOT如何从norflash和nandflash启动
- 【网络存储】存储区域网络SAN
- 理解jquery的$.extend()、$.fn和$.fn.extend()
- sdut 3774 烈焰风暴
- 微信小程序的认识
- 解决手机端ios无法自动播放音乐的问题
- ice学习系统 1 ice 中的基本概念
- 如何:创建具有专业样式的 ToolStrip 控件
- Xilinx FPGA 嵌入式系统程序引导和启动的流程分析设计
- 整理webView控件加载H5网页中视频播放不了的解决方案
- 获取本地ip
- web服务器之iis,apache,tomcat三者之间的比较