列表

详情


NC200520. 打 boss

描述

玩家正在与怪物 boss 对战,玩家有血量 HP1 、攻击力 ATK1 ,boss 有血量 HP2 、攻击力 ATK2 、每回合回血量 M。

对战是回合制,每回合分三个阶段:
      1. 玩家攻击怪物,怪物减少 ATK1 点血
      2. 怪物攻击玩家,玩家减少 ATK2 点血
      3. 怪物回血 M 点

请判断玩家能否将 boss 打败,即是否存在任意时刻满足 boss 血量 且玩家血量  。

输入描述

第一行一个整数 T ,表示数据组数。

接下来 T 行,每行五个整数,分别表示 HP1 、 HP2 、 ATK1 、 ATK2 、M,均为正整数且不超过 

保证

输出描述

每组数据输出一行一个字符串,玩家能将 boss 打败 ,输出 Yes ,否则输出 No 。

示例1

输入:

2
100000 2 2 20 2
114514 1919810 1 1 1

输出:

Yes
No

说明:

第一组数据:第一回合玩家攻击 boss 后 boss 被打败
第二组数据:第 114514 回合玩家血量归零而 boss 血量 > 0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 226ms, 内存消耗: 1016K, 提交时间: 2020-01-22 14:26:11

#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	for(int i=0;i<t;i++)
	{
        long long hp1,hp2,atk1,atk2,m,a=0;
		scanf("%d%d%d%d%d",&hp1,&hp2,&atk1,&atk2,&m);
		if(hp1%atk2!=0) a=1;
		a+=hp1/atk2;
		if(hp2<=atk1) puts("Yes");
		else
		if(a*atk1>=hp2+(a-1)*m)
		puts("Yes");
		else
		puts("No");
	}
	return 0;
 } 

C++14(g++5.4) 解法, 执行用时: 159ms, 内存消耗: 8672K, 提交时间: 2020-03-31 21:24:50

#include<cstdio>
int T,hp1,hp2,at1,at2,m;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d%d%d",&hp1,&hp2,&at1,&at2,&m);
        if(hp2<=at1)puts("Yes");
        else if(m>=at1)puts("No");
        else if((hp2-at1-1)/(at1-m)<(hp1-1)/at2)puts("Yes");
        else puts("No");
    }
return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 548ms, 内存消耗: 10784K, 提交时间: 2020-08-01 00:23:09

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
	ll t,a,b,c,d,e;
	cin>>t;
	while(t--)
	{
		cin>>a>>b>>c>>d>>e;
		if(b<=c)cout<<"Yes"<<endl;
		else if(e>=c)cout<<"No"<<endl;
		else if((b-c-1)/(c-e)<(a-1)/d)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	    
	} 
}

Python3(3.5.2) 解法, 执行用时: 1627ms, 内存消耗: 6976K, 提交时间: 2020-04-09 19:42:13

for ___ in [0] * int(input()):
    h1, h2, a1, a2, m = map(int, input().split())
    suc = False
    if a1 >= h2:
        suc = True
    if (h1 + a2 - 1) // a2 * (a1 - m) + m >= h2:
        suc = True
    print('Yes' if suc else 'No')

上一题