算法分析与设计课程01——495. Teemo Attacking
2017-02-25 21:52
357 查看
一、题目描述(中文)原题链接
在LLP的世界里,有一个名叫Teemo的英雄,他的攻击可以让他的敌人Ashe陷入中毒的状态。现在,我们将给出Teemo对Ashe发起攻击的时间点的上升序列,以及每次攻击后Ashe中毒状态持续的时间,你需要输出Ashe处于中毒状态的时间总和。
假设Teemo的攻击发起在每个时间点的最开端,并且在发起攻击时便立刻使Ashe陷入中毒状态。
例1:
例2
二、题目分析
按照输入的数组我们能将之看成一个时间轴上有几个攻击点,如下图所示:
![](https://img-blog.csdn.net/20170225215434276?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQnJvdGhlcl9YaWFuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果在时间点1攻击,在时间点4再攻击,中毒时间为2,4-1=3,那就意味着,在时间间隔1~4里:
3(间隔时间)>2(中毒时间),所以在时间点4再攻击,这个间隔计入中毒时间为2。
同样的思路:
如果在时间点1攻击,在时间点2在攻击,中毒时间为2,所以在时间间隔1~2里:
2-1=1,1(间隔时间)<2(中毒时间),计入中毒时间为1。
三、代码实现(细节问题已写在注释里)
在LLP的世界里,有一个名叫Teemo的英雄,他的攻击可以让他的敌人Ashe陷入中毒的状态。现在,我们将给出Teemo对Ashe发起攻击的时间点的上升序列,以及每次攻击后Ashe中毒状态持续的时间,你需要输出Ashe处于中毒状态的时间总和。
假设Teemo的攻击发起在每个时间点的最开端,并且在发起攻击时便立刻使Ashe陷入中毒状态。
例1:
输入:[1.4],2 输出:4 解释:在第1个时间单位,Teemo对Ashe发起进攻,并使Ashe立刻处于中毒状态。Ashe的这种中毒状态将持续2个时间单位,直到第2个时间单位结束,中毒状态结束。 在第4个时间单位,Teemo再次对Ashe发起进攻,使Ashe再次陷入持续2个时间单位的中毒状态中。 所以,你最终输出的结果是4。
例2
输入:[1,2],2 输出:3 解释:在第1个时间单位,Teemo对Ashe发起攻击并使Ashe立刻处于中毒状态。Ashe的这种中毒状态将持续2个时间单位,直到第2个时间单位结束,中毒状态结束。 然而,在第2个时间单位一开始,Teemo便对已经处在中毒状态的Ashe再次发起了攻击。 中毒状态不会叠加,不过第二次攻击对Ashe带来的中毒作用仍然会在第2个时间单位开始,Ashe的中毒状态将会在第3个时间单位结束时结束。 所以,你最终输出结果是3。
二、题目分析
按照输入的数组我们能将之看成一个时间轴上有几个攻击点,如下图所示:
如果在时间点1攻击,在时间点4再攻击,中毒时间为2,4-1=3,那就意味着,在时间间隔1~4里:
3(间隔时间)>2(中毒时间),所以在时间点4再攻击,这个间隔计入中毒时间为2。
同样的思路:
如果在时间点1攻击,在时间点2在攻击,中毒时间为2,所以在时间间隔1~2里:
2-1=1,1(间隔时间)<2(中毒时间),计入中毒时间为1。
三、代码实现(细节问题已写在注释里)
#include <iostream> using namespace std; int main() { /* 输入攻击次数:attack_num 输入攻击时间序列:attack_series 输入中毒时间:duration */ int attack_num = 0; cin >> attack_num; int* attack_series = new int[attack_num]; for(int i = 0; i < attack_num; i ++) cin >> attack_series[i]; int duration = 0; cin >> duration; // 中毒时间总和:poison_time int poison_time = 0; if(attack_num == 1) // 特殊情况:attack_num = 1时,由于只进行一次攻击,所以中毒时间为duration poison_time = duration; else if(attack_num == 0) // 特殊情况:attack_num = 0时,由于只进行一次攻击,所以中毒时间为0 poison_time = 0; else{ // 一般情况 for(int i = 0; i < attack_num - 1; i ++) { int d = attack_series[i + 1] - attack_series[i]; if(d >= duration) poison_time = poison_time + duration; else poison_time = poison_time + d; } //最后一个时间点攻击后,中毒时间恒为duration poison_time = poison_time + duration; } cout << poison_time; return 0; }
相关文章推荐
- 算法分析与设计课程06——542. 01 Matrix(Medium)
- 算法分析与设计课程(2):Letter Combinations of a Phone Number
- 算法分析与设计课程(4):【leetcode】Wildcard Matching
- 算法分析与设计课程(14):【leetcode】 Maximal Square
- 算法分析与设计课程(16):【leetcode】 Integer to Roman
- 算法分析与设计课程总结
- 算法分析与设计课程14——416. Partition Equal Subset Sum
- 算法分析与设计课程(3):【leetcode】Permutations
- 算法分析与设计课程(15):【leetcode】 Find Minimum in Rotated Sorted Array
- 算法分析与设计课程(12):【leetcode】 Count Complete Tree Nodes
- 算法分析与设计课程(17):【leetcode】4Sum
- 算法分析与设计课程资料:蚂蚁算法的初步研究与计算机模拟
- 算法分析与设计课程(10):【leetcode】Simplify Path
- 算法分析与设计课程(6):【leetcode】Sudoku
- 算法分析与设计课程10——523. Continuous Subarray Sum
- 计算机算法设计与分析作业01:分治法求解大数乘法+L型骨牌的棋盘覆盖问题
- 算法分析与设计课程(7):【leetcode】Reverse Nodes in k-Group
- 算法分析与设计课程(5):【leetcode】Search for a Range
- 算法分析与设计课程(8):【leetcode】Sudoku Solver
- 算法分析与设计课程16——376. Wiggle Subsequence