poj 2668 -- Defending Castle(数学题)

本文介绍了一个数学问题,涉及抛石机在每次攻击时造成的伤害递减情况。给定初始伤害值D和投掷次数N,计算总伤害。通过分析找到递减规律,得出一个求解总伤害的算法,并提供了示例和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Defending CastleTime Limit: 2000MS Memory Limit: 65536K
Total Submissions: 4559 Accepted: 1060


Description
The kingdom Eintagra is in great danger! Overwhelming enemy has surrounded the emperor's castle and once they enter, a massacre is just what is going to be.

Now what all people in the kingdom Eintagra can rely on, is a huge catapult that can throw heavy rocks to the crowd of enemy. The catapult is so huge that it is too hard to adjust the direction it targets. So the damage it can do to the enemy is decreasing for every throw because the enemy in the targeted area are going to move away. If on the first attack it can make a certain damage, then on the second it can do only half, and 1/3 the damage on the third attack, and this holds, by estimation, that the K-th attack does 1/K damage of the first attack can do. People are optimistic so if the damage is not an integer, they round it up to the nearest bigger integer.

Given the damage of the first attack of the catapult and the life of the catapult, people need to know how much total damage the catapult can do to the enemy.


Input
There are multiple test cases. Each contains two positive integers D and N in a single line, where D is the damage of the first attack of the catapult, and N is its life measured by the number of attacks it can make. D and N are both positive integers and not more than 2000000000.

Input ends with two zeros and this line should not be processed.

Output
Output a single line with an integer reporting the total damage that the catapult can do to the enemy.

Sample Input
1 1
2 3
0 0

Sample Output
1
4

Source
Beijing 2005 Preliminary
Author:nealzane

 

 

文章很废话

 

说的就是已知d,n 求解d/1+d/2+d/3+....+d/n并且每个数都取上整

 

 

一开始读到这题没什么想法,想了好一会儿

 

举例:

 

d=7,n=7

 

则数列为

 

7 4 3 2 2 2 1

1 2 3 4 5 6 7

 

 

可以发现一个规律

 

d/i 向上取整的值表示的是 d/k=i的起始位置

 

例如: 7/1=7,  则7/k=1, k从7开始

又比如 7/2=4, 则 7/k=2 , k从4开始

 

因此我们可以获得一个 d/k=i 的一个区间

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值