列表

详情


NC231666. SOLO

描述

longli曾经是个老lol玩家,有一天好友叫他来单挑,他当然欣然接受
当然游戏是一时的事,潇洒是一辈子的事,这天longli选择了英雄亚索,好友选择了英雄劫
假设两者英雄血量无限,每轮都会出招,最后谁丢失的生命值多谁就输掉了
m轮回合
每轮回合你能知道他们都采取了什么操作,给你两个数op1op2,op1代表亚索的出招,op2代表劫的
,亚索释放斩钢闪,造成a_0点伤害,每第三次释放斩钢闪将引来狂风,本次一共造成伤害
,亚索进行走位闪避,如果劫本回合释放手里剑将躲掉,同时亚索每走完5次位后,将获得一层护盾,可以在接下来抵挡a_1伤害,护盾可以叠加
,劫扔出手里剑,命中将造成b_0点伤害,如果分身存在,分身也扔一枚手里剑,一共将造成2b_0伤害
,劫释放一个分身,分身将在接下来存在4个回合,如果释放时,之前的分身也存在,之前的分身消失
,劫释放鬼斩,造成b_1伤害,并将亚索减速,接下来一回合如果释放手里剑不能被走位躲掉
如果最后亚索胜利,输出"mianduijifengba!",否则输出"siyuheian!".
如果血量一样分不出胜负输出"hhh"

输入描述

第一行输入一个正整数 m ,代表 m 回合 
第二行依次输入 4 个数 a_0,a_1,b_0,b_1 ,含义如上
接下来 m 行,每行输入

输出描述

输出一行字符串

示例1

输入:

9
1 1 1 1
2 1
2 2
2 1
2 3
2 1
1 1
1 1
1 2
1 2

输出:

mianduijifengba!

说明:

第一回合,劫放手里剑,亚索走位躲掉,亚索总受到伤害0,劫总受到伤害0
第二回合,劫放分身,亚索走位躲掉,亚索总受到伤害0,劫总受到伤害0
第三回合,劫放手里剑,亚索走位躲掉,亚索总受到伤害0,劫总受到伤害0
第四回合,劫放鬼斩,亚索走位无效,亚索总受到伤害1,劫总受到伤害0
第五回合,劫放手里剑,亚索走位因被上回合鬼斩减速无效,且存在分身,亚索总受到伤害3,劫总受到伤害0
第六回合,劫放手里剑,劫存在分身造成2点伤害,亚索此时有护盾抵挡1伤害,实际1点伤害,亚索斩钢闪造成1点伤害,亚索总受到伤害4,劫总受到伤害1
第七回合,劫放手里剑,此时分身消失造成1点伤害,亚索斩钢闪造成1点伤害,亚索总受到伤害5,劫总受到伤害2
第八回合,劫放分身,亚索斩钢闪第三次释放,造成3点伤害,亚索总受到伤害5,劫总受到伤害5
第九回合,劫放分身,亚索斩钢闪造成1点伤害,亚索总受到伤害5,劫总受到伤害6
最终亚索胜利

原站题解

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

C 解法, 执行用时: 27ms, 内存消耗: 1060K, 提交时间: 2021-12-19 16:34:50

#include <stdio.h>

int main() 
{ 
int n,i=1,m,a0,a1,b0,b1,c=0,d=0,e=0,f=0,g=0;
scanf("%d",&m);
int op1[m+1],op2[m+1];
op1[0]=0;op2[0]=0;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
while(m>0){
scanf("%d%d",&op1[i],&op2[i]);	
if(op1[i]==1){
	e++;
	if(e<3){
	d=d+a0;
	}
	if(e==3){
		e=0;
		d=d+3*a0;
	}}
if(op1[i]==2){
	f++;
	if(op2[i]==1&&op2[i-1]!=3&&g==0){
	c=c-b0;
    }
	if(op2[i]==1&&op2[i-1]!=3&&g!=0){
	c=c-2*b0;
	}
	if(f==5){
		f=0;
		c=c-a1;
	}
	
}
if(op2[i]==1){
	if(g!=0)
	c=c+2*b0;
	else
	c=c+b0;
	
}
if(op2[i]==2){
	g=5;
	
}
if(op2[i]==3){
	c=c+b1;
}






if(g!=0)
g--;
m--;
i++;}
if(c<d)
printf("mianduijifengba!\n");
else if(c==d)
printf("hhh\n");
else
printf("siyuheian!\n");
 return 0;
}

C++ 解法, 执行用时: 44ms, 内存消耗: 824K, 提交时间: 2021-12-22 21:29:08

#include<bits/stdc++.h>
using namespace std;
int main(){
    int m,a0,a1,b0,b1,op1,op2,sum1=0,sum2=0,x=0,y=0,now=0,flag=0;
    for(cin>>m>>a0>>a1>>b0>>b1;m--;){
        cin>>op1>>op2;
        y--,flag--;
        if(x==5) sum1-=a1,x=0;
        if(op1==1) sum2+=a0,now++;
        if(now==3) sum2+=2*a0,now=0;
        if(op2==1){
            if(op1==1||(op1==2&&flag==0)){
                if(y>=0) sum1+=2*b0;
                else sum1+=b0;
            }
        }
        if(op1==2) x++;
        if(op2==2) y=4;
        if(op2==3) flag=1,sum1+=b1;
    }
    if(sum1==sum2) cout<<"hhh";
    else if(sum1<sum2) cout<<"mianduijifengba!";
    else cout<<"siyuheian!";
    return 0;
}

上一题