洛谷P1785 漂亮的绝杀

题目背景

话说absi2011的企鹅在和斗神塔第60层的Boss战斗

不好,这局要输了,企鹅还剩4血了Boss还有392呢,哇,漂亮——红缨枪连击,280,343(暴击),绝杀!嗜血(4星,嗜血50%),完胜(absi2011的60级企鹅贫血,就315,玩过乐斗的别黑)!

题目描述

别说这是个巧合,这类绝杀还真不少。

现在假设Boss还剩下的血为x,absi2011的企鹅剩y血,它拿出的武器的伤害最高是z。它的武器有几率连击。

他问你有无可能绝杀(可连击)。如果能,请先输出一行”Yes”,不能输出”No”。如果他给你的数据是错的,请输出”Wrong Data”

数据有这么几种情况算错:y<=0或y>315或y>=x或x>1800(当前斗神塔Boss好像没有超过1800血的)或z>=1000(红缨枪+天马流星拳+会心一击+残影+武器好手好像都达不到)或z<=100(absi2011认为小于等于100就不算绝杀了)

(输出Yes后)接下来,他还想问绝杀(就算最高伤害)后如果触发他的3星嗜血/4星嗜血/5星吸星大法各能不能完胜。三星每次的嗜血嗜血量为33%*伤害(下取整),四星每次的嗜血嗜血量为50%*伤害(下取整),五星吸星大法嗜血量为100%*伤害(这还真不用下取整)。两次要分开算。如果超过血上限就不再回血了。

如果三星能就输出一行”Great”,四星能就输出一行”Eh..”和一行”OK”,五星能就输出两行”Oh..”和一行”Yes , If he can get 5-star.”

如果都不行,那么输出三行”No”和他4星嗜血后的血量。

注意,有可能打一下Boss就挂了,那么不能连击嗜血了。只能算打死Boss那下的嗜血。

输入格式

一行三个整数,x、y、z

输出格式

如题目所描述

输入输出样例

输入 #1复制

【样例输入1】
392 4 343

【样例输入2】
392 1 101

输出 #1复制

【样例输出1】
Yes
Eh..
OK

【样例输出2】
No

说明/提示

【Hint】

Boss死掉当且仅当Boss血<=0(其实<0会自动当成=0)

【数据范围】

对于30%的数据,保证结果为Wrong Data或No或Yes(回车)Great

对于另外30%的数据,保证结果不为Wrong Data

对于100%的数据,保证-10000<=x<=10000,-10000<=y<=10000,-10000<=z<=10000,即使Wrong Data了

【题目来源】

fight.pet.qq.com

absi2011授权原创题目。

上代码:

#include <iostream>
using namespace std;
int x,y,z;
bool flag=false;//判断是否能触发嗜血。
int main()
{
	cin>>x>>y>>z;
 if(y<=0||y>315||y>=x||x>1800||z>=1000||z<=100)
		cout<<"Wrong Data"<<endl;//判断数据是否错误。
	else if(z*2<x) cout<<"No"<<endl;//判断是否能绝杀
	else//能绝杀触发嗜血判断。
	{
		cout<<"Yes"<<endl;
		if(z>=x)//一击致命
		{
			if(int(z*0.33)*1+y>=315)//三星嗜血,类型要直接强制转换!否则会出现事故。
			{
				cout<<"Great"<<endl;//字符串输出注意!建议直接复制原文,有些英文空格之类的肉眼会看不清而忽略。
				flag=true;//说明成功触发嗜血,flag置为true,下同。
			}
			else if(int(z*0.5)*1+y>=315)
			{
				cout<<"Eh.."<<endl<<"OK"<<endl;
				flag=true;//这里字符串注意,是两行!!!
			}
			else if(z+y>=315)
			{
				cout<<"Oh.."<<endl<<"Oh.."<<endl<<"Yes , If he can get 5-star."<<endl;
				flag=true;//大坑出现,逗号先后都有一个英文空格,极其易错!
			}
			if(!flag)//判断无法嗜血。
			{
				cout<<"No"<<endl<<"No"<<endl<<"No"<<endl;
				cout<<int(z*0.5)+y<<endl;
			}
		}
		else//连击时,嗜血量要乘2,易错!
		{
			if(int(z*0.33)*2+y>=315)
			{
				cout<<"Great"<<endl;
				flag=true;
			}
			else if(int(z*0.5)*2+y>=315)
			{
				cout<<"Eh.."<<endl<<"OK"<<endl;
				flag=true;
			}
			else if(z*2+y>=315)
			{
				cout<<"Oh.."<<endl<<"Oh.."<<endl<<"Yes , If he can get 5-star."<<endl;
				flag=true;
			}
			if(!flag)
			{
				cout<<"No"<<endl<<"No"<<endl<<"No"<<endl;
				cout<<int(z*0.5)*2+y<<endl;
			}
		}
	}
	return 0;//结束,竞赛党记得加return 0。
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值