在线等c++题解 急急急!!!
题目描述kls要打一个血量为nn的史莱姆,每回合他可以攻击一次,造成kk点伤害。当一个史莱姆的血量小于等于0时,就会死亡。如果一个史莱姆受到攻击后,当前血量小于等于最大血...
题目描述
kls要打一个血量为 nn 的史莱姆,每回合他可以攻击一次,造成 kk 点伤害。当一个史莱姆的血量小于等于0时,就会死亡。
如果一个史莱姆受到攻击后,当前血量小于等于最大血量的一半,且没有死亡,就会分裂成两个史莱姆,它们的当前血量和最大血量都等于分裂前的血量。
假设史莱姆不会攻击,只会挨打,求kls打掉所有史莱姆需要的回合数。
输入输出格式
输入格式:
一行两个正整数 n,kn,k ,含义如上。
输出格式:
一个数,表示需要的回合数。
输入输出样例
输入样例#1:
60 10
输出样例#1:
11
说明
样例的解释
一开始,有1个血量为60的史莱姆。
kls攻击3次之后,它的血量变为30,分裂成2个30血的史莱姆。
对其中一个攻击2次之后,它的血量变为10,分裂成2个10血的史莱姆。再对每个10血的史莱姆攻击1次,它的血量变为0,直接死亡。
对另一个也是同样的操作。
总共需要 3+2+1+1+2+1+1=113+2+1+1+2+1+1=11 个回合。
数据范围
对于30%的数据,满足 1\le k \le n\le 10^61≤k≤n≤10
6
;
对于60%的数据,满足 1\le k \le n\le 10^81≤k≤n≤10
8
;
对于100%的数据,满足 1\le k \le n\le 10^{10}1≤k≤n≤10
10
。 展开
kls要打一个血量为 nn 的史莱姆,每回合他可以攻击一次,造成 kk 点伤害。当一个史莱姆的血量小于等于0时,就会死亡。
如果一个史莱姆受到攻击后,当前血量小于等于最大血量的一半,且没有死亡,就会分裂成两个史莱姆,它们的当前血量和最大血量都等于分裂前的血量。
假设史莱姆不会攻击,只会挨打,求kls打掉所有史莱姆需要的回合数。
输入输出格式
输入格式:
一行两个正整数 n,kn,k ,含义如上。
输出格式:
一个数,表示需要的回合数。
输入输出样例
输入样例#1:
60 10
输出样例#1:
11
说明
样例的解释
一开始,有1个血量为60的史莱姆。
kls攻击3次之后,它的血量变为30,分裂成2个30血的史莱姆。
对其中一个攻击2次之后,它的血量变为10,分裂成2个10血的史莱姆。再对每个10血的史莱姆攻击1次,它的血量变为0,直接死亡。
对另一个也是同样的操作。
总共需要 3+2+1+1+2+1+1=113+2+1+1+2+1+1=11 个回合。
数据范围
对于30%的数据,满足 1\le k \le n\le 10^61≤k≤n≤10
6
;
对于60%的数据,满足 1\le k \le n\le 10^81≤k≤n≤10
8
;
对于100%的数据,满足 1\le k \le n\le 10^{10}1≤k≤n≤10
10
。 展开
1个回答
2018-08-03
展开全部
【思路解析】这道题难在计算的方法,而不是编程的方法。根据题意:n题,每题m分,A打勾a题,得x分;B打勾b题,得y分;C全打叉,问至少得几分? 可以用分步法来算,为了简化过程,先假设每题1分,A对x题,B对y题,具体分析如下:先比较A和C的差别:因为C全打叉,A有a题打勾,那么A和C的差别在哪?就在打勾的这几道题啊!第一种情况:如果x>=a时,C最糟糕的得分是A打勾的a题全对,因为这部分C全打叉,所以这部分C只能得0分,剩下的选择和A相同,所以C最少得分是x-a。比如总共10题,A打勾了6题得8分,对C来讲最不好的情况就是A打勾的这6题全对,A这部分得6分,而C这部分题得0分,那么剩下4道打叉的题A得2分,因为这部分C和A一样都打叉,所以这部分C会也得2分,所以最糟糕的情况是最终C得2分。这是第一种情况。第二种情况:如果x=a时,C得分=x-a;当x=a时,C得分=y-a;当y //控制台操作头文件int main() //主函数{int n,m,a,x,b,y; //整型变量 int t,z=0; //z是C的最少得分 scanf("%d %d",&n,&m); //输入n题,每题m分 scanf("%d %d %d %d",&a,&x,&b,&y);//输入a,x,b,y if(x>=a*m) z=x-a*m; //符合A条件时C的最少得分 else z=a*m-x; if(y>=b*m) t=y-b*m; //符合B条件时C的最少得分 else t=b*m-x; if(z
追问
???
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询