第三道月模csp201609-3炉石传说

2023-05-16

题目

《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下:
  * 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。
  * 玩家各控制一个英雄,游戏开始时,英雄的生命值为 30,攻击力为 0。当英雄死亡时,游戏结束,英雄未死亡的一方获胜。
  * 玩家可在游戏过程中召唤随从。棋盘上每方都有 7 个可用于放置随从的空位,从左到右一字排开,被称为战场。当随从死亡时,它将被从战场上移除。
  * 游戏开始后,两位玩家轮流进行操作,每个玩家的连续一组操作称为一个回合。
  * 每个回合中,当前玩家可进行零个或者多个以下操作:
  1) 召唤随从:玩家召唤一个随从进入战场,随从具有指定的生命值和攻击力。
  2) 随从攻击:玩家控制自己的某个随从攻击对手的英雄或者某个随从。
  3) 结束回合:玩家声明自己的当前回合结束,游戏将进入对手的回合。该操作一定是一个回合的最后一个操作。
  * 当随从攻击时,攻击方和被攻击方会同时对彼此造成等同于自己攻击力的伤害。受到伤害的角色的生命值将会减少,数值等同于受到的伤害。例如,随从 X 的生命值为 HX、攻击力为 AX,随从 Y 的生命值为 HY、攻击力为 AY,如果随从 X 攻击随从 Y,则攻击发生后随从 X 的生命值变为 HX - AY,随从 Y 的生命值变为 HY - AX。攻击发生后,角色的生命值可以为负数。
  本题将给出一个游戏的过程,要求编写程序模拟该游戏过程并输出最后的局面。

输入输出

Input

输入第一行是一个整数 n,表示操作的个数。接下来 n 行,每行描述一个操作,格式如下:
   …
  其中表示操作类型,是一个字符串,共有 3 种:summon表示召唤随从,attack表示随从攻击,end表示结束回合。这 3 种操作的具体格式如下:
  * summon :当前玩家在位置召唤一个生命值为、攻击力为的随从。其中是一个 1 到 7 的整数,表示召唤的随从出现在战场上的位置,原来该位置及右边的随从都将顺次向右移动一位。
  * attack :当前玩家的角色攻击对方的角色 。是 1 到 7 的整数,表示发起攻击的本方随从编号,是 0 到 7 的整数,表示被攻击的对方角色,0 表示攻击对方英雄,1 到 7 表示攻击对方随从的编号。
  * end:当前玩家结束本回合。
  注意:随从的编号会随着游戏的进程发生变化,当召唤一个随从时,玩家指定召唤该随从放入战场的位置,此时,原来该位置及右边的所有随从编号都会增加 1。而当一个随从死亡时,它右边的所有随从编号都会减少 1。任意时刻,战场上的随从总是从1开始连续编号。

Output

输出共 5 行。
  第 1 行包含一个整数,表示这 n 次操作后(以下称为 T 时刻)游戏的胜负结果,1 表示先手玩家获胜,-1 表示后手玩家获胜,0 表示游戏尚未结束,还没有人获胜。
  第 2 行包含一个整数,表示 T 时刻先手玩家的英雄的生命值。
  第 3 行包含若干个整数,第一个整数 p 表示 T 时刻先手玩家在战场上存活的随从个数,之后 p 个整数,分别表示这些随从在 T 时刻的生命值(按照从左往右的顺序)。
  第 4 行和第 5 行与第 2 行和第 3 行类似,只是将玩家从先手玩家换为后手玩家。

Sample Input

8
summon 1 3 6
summon 2 4 2
end
summon 1 4 5
summon 1 2 1
attack 1 2
end
attack 1 1

Sample Output

0
30
1 2
30
1 2

样例说明

按照样例输入从第 2 行开始逐行的解释如下:
  1. 先手玩家在位置 1 召唤一个生命值为 6、攻击力为 3 的随从 A,是本方战场上唯一的随从。
  2. 先手玩家在位置 2 召唤一个生命值为 2、攻击力为 4 的随从 B,出现在随从 A 的右边。
  3. 先手玩家回合结束。
  4. 后手玩家在位置 1 召唤一个生命值为 5、攻击力为 4 的随从 C,是本方战场上唯一的随从。
  5. 后手玩家在位置 1 召唤一个生命值为 1、攻击力为 2 的随从 D,出现在随从 C 的左边。
  6. 随从 D 攻击随从 B,双方均死亡。
  7. 后手玩家回合结束。
  8. 随从 A 攻击随从 C,双方的生命值都降低至 2。

数据规模与约定

* 操作的个数0 ≤ n ≤ 1000。
  * 随从的初始生命值为 1 到 100 的整数,攻击力为 0 到 100 的整数。
  * 保证所有操作均合法,包括但不限于:
  1) 召唤随从的位置一定是合法的,即如果当前本方战场上有 m 个随从,则召唤随从的位置一定在 1 到 m + 1 之间,其中 1 表示战场最左边的位置,m + 1 表示战场最右边的位置。
  2) 当本方战场有 7 个随从时,不会再召唤新的随从。
  3) 发起攻击和被攻击的角色一定存在,发起攻击的角色攻击力大于 0。
  4) 一方英雄如果死亡,就不再会有后续操作。
  * 数据约定:
  前 20% 的评测用例召唤随从的位置都是战场的最右边。
  前 40% 的评测用例没有 attack 操作。
  前 60% 的评测用例不会出现随从死亡的情况。

思路分析

第三道题总是这么绕…对不玩游戏的人有一丢丢不友好…
首先定义一个结构体,存储生命值和攻击力。双方玩家各开一个结构体数组,0号位置存储英雄,其余存储随从。
模拟游戏流程:
flag标志先后手玩家。在一轮游戏中,任意一个随从生命值<=0,则将其从表中删除,随从攻击后,当前生命值=原生命值-攻击对象攻击力。对于先手玩家,若英雄生命值<=0,则先手玩家输;对于后手玩家,若英雄生命值<=0,则后手玩家输。end时切换标识。

注意

数组移动的时候要防止越界,所以初始化数组的时候要开大亿点点。
攻击的时候要判断是不是英雄,英雄是不移动的,此处卡住三个测试点…

AC代码

#include<bits/stdc++.h>
using namespace std;

struct player{ 
	int life;//生命值
	int atk;//攻击力
}p0[10];//先手玩家 

int n;
string s;
player p1[10];//后手玩家 
int a[10],b[10];//记录随从是否还在 

int main(){
	cin>>n;
	p0[0].life=p1[0].life=30;//初始化英雄生命 
	int flag=0,tot=0,tot1=0; //flag标志先后手
	for(int i=1;i<=n;i++){
		cin>>s;
		//召唤随从
		if(s=="summon"){ 
			int pos,atk,life;
			//随从的位置 攻击力 生命值
			cin>>pos>>atk>>life;
			if(flag==0){//先手玩家
				for(int j=7;j>pos;j--)
				{   //记录随从 
					p0[j].life=p0[j-1].life;
					p0[j].atk=p0[j-1].atk;
					a[j]=a[j-1];
					a[j-1]=0;
				}
				p0[pos].atk=atk;
				p0[pos].life=life;
				a[pos]=1;
			}
			else if(flag==1){
				for(int j=7;j>pos;j--)
				{   //记录随从 
					p1[j].life=p1[j-1].life;
					p1[j].atk=p1[j-1].atk;
					b[j]=b[j-1];
					b[j-1]=0;
				}
				b[pos]=1;
				p1[pos].atk=atk;
				p1[pos].life=life;
			}
		}
		//随从攻击
		else if(s=="attack"){ 
			int id1,id2;//随从号 
			cin>>id1>>id2;
			if(p0[0].life<=0||p1[0].life<=0) continue;
			if(flag==0){//先手玩家攻击
				p0[id1].life-=p1[id2].atk;
				p1[id2].life-=p0[id1].atk;
			}
			else if(flag==1){//后手玩家攻击 
				p1[id1].life-=p0[id2].atk;
				p0[id2].life-=p1[id1].atk;
			}
			for(int j=1;j<=7;j++){//找到死亡的随从 
				if(a[j]==1&&p0[j].life<=0){
					a[j]=0;
					for(int k=j;k<7;k++){
						p0[k].atk=p0[k+1].atk;
						p0[k].life=p0[k+1].life;
						a[k]=a[k+1];
						a[k+1]=0;
					}
					break;
				}
			}
			for(int j=1;j<=7;j++){//将死亡的随从删掉 
				if(b[j]==1&&p1[j].life<=0){
					b[j]=0;
					for(int k=j;k<7;k++){
						p1[k].atk=p1[k+1].atk;
						p1[k].life=p1[k+1].life;
						b[k]=b[k+1];
						b[k+1]=0;
					}
				}
			}
		}
		else if(s=="end"){//回合结束
			if(flag==0) flag=1;
		   	else flag=0;
		} 
	}
	if(p0[0].life<=0) cout<<"-1"<<endl;//先手英雄死 
	else if(p1[0].life<=0) cout<<"1"<<endl;//后手英雄死 
	else if(p0[0].life>0&&p1[0].life>0) cout<<"0"<<endl;
	cout<<p0[0].life<<endl;
	for(int i=1;i<=7;i++){
		if(p0[i].life>0) tot++;
		if(p1[i].life>0) tot1++;
	}
	cout<<tot;
	for(int i=1;i<=7;i++)
	{
		if(p0[i].life>0) 
			cout<<" "<<p0[i].life;		
	}
	cout<<"\n"<<p1[0].life<<"\n"<<tot1;
	for(int i=1;i<=7;i++)
	{
		if(p1[i].life>0) 
			cout<<" "<<p1[i].life;		
	}
	cout<<endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第三道月模csp201609-3炉石传说 的相关文章

  • 基于STM32CubeIDE实现外部中断按钮控制LED灯亮

    小白入门 xff0c 记录一下学习体验及过程 原文可能图片不清晰 xff0c 如需下载原WORD文档 xff0c 请右转 xff1a 链接 xff1a https pan baidu com s 17X8iB865ZgHgGYnUJ1bSR
  • 【python+pytorh自然语言处理】AttributeError: 'Example' object has no attribute 'label'错误提示

    基于nlp自然语言预测模型 在建模训练过程中遇到如下问题 xff0c 供大家学习 xff0c 借鉴如下问题1 数据集字符编码问题 xff0c 96 39 utf 8 39 codec can 39 t decode byte 0xb1 in
  • 自适应 sprintf源码

    span class comment include 34 stdafx h 34 span span class preprocessor define INCLUDE STRING span span class preprocesso
  • CCF CSP认证2016年9月,NO.3 炉石传说

    炉石传说 不知道现在题目公开了没有 xff0c 最近考完试比较闲 xff0c 所以开通了博客 xff0c 写写自己考试时候这道题的思路吧 根据真实 魔兽世界 炉石传说 的游戏建模改编 xff0c 以下是题目的回忆 xff08 若有不准 xf
  • 数据库表设计-第三方登录用户表结构设计

    说起用户表 xff0c 大概是每个应用 网站立项动工 xff08 码农们 xff09 考虑的第一件事情 用户表结构的设计 xff0c 算是整个后台架构的基石 如果基石不稳 xff0c 待到后面需求跟进了发现不能应付 xff0c 回过头来反复
  • MacBook Air 怎么访问局域网内的共享文件夹

    方案一 xff1a 1 打开浏览器 xff0c 输入 smb 对方主机IP地址 xff0c 例如 xff1a smb 192 166 1 100 2 允许打开访达 3 加载一会后会出现下图 xff0c 选择对方共享的文件夹 xff0c 点击
  • C#语法小知识(三)枚举类型enum

    枚举类型声明一系列常数 xff0c 用于表示这个类型的变量可能会在这些常数里变化 我们在这篇文章里讲一下枚举类型的几个用法 一个简单的枚举类型的定义 xff1a enum TestEnum x y z 而使用也很简单 xff1a TestE
  • 微信开放平台之第三方平台代公众号发起网页授权

    正式讲解之前我想问一个问题 xff1a 微信开放平台第三方平台为什么会出现 xff1f 或者说微信的开发人员为什么弄出个开放平台的第三方平台出来 xff1f 我的理解是 xff1a 原本公众号开发时只能给一家公司开发 xff0c 因为配置的
  • Undefined symbol RTC_DateStruct (referred from main.o).

    被自己蠢哭了 我是两个工程文件合在一起用的 一个工程中的 c文件变量定义之后是在另一个 c文件中共用的所以用了 extern RTC TimeTypeDef RTC TimeStruct extern RTC DateTypeDef RTC
  • 关于Win10下安装Linux ubuntu子系统遇到的几个问题

    1 首先是ubuntu下载 xff0c 在Win10自带的应用商店Microsoft Store搜索 ubuntu 即可找到 2 安装完成后启动 ubuntu 后 Installing this may take a few minutes
  • 嵌入式学习-STM32F103ZE中断配置

    目录 一 中断概念 二 中断类型 三 NVIC 四 中断优先级 五 中断编程顺序 1 使能中断请求 2 中断优先级配置 3 初始化NVIC InitTypeDef结构体 4 中断服务函数 六 总结 一 中断概念 中断是指计算机运行过程中 x
  • haproxy的统计报告功能

    HAProxy的统计报告 简介 HAProxy有统计报告功能 可以让使用者通过web页面概览后端服务器的概况 甚至更改它们的状态 配置 vim etc haproxy haproxy cfg listen statistics bind 9
  • win10 Remote Host 调试 ubuntu18.04 中有libXXX.so库,报/usr/lib/ld 找不到-lxxx

    按照下图操作 xff0c 找到自己的交叉编译环境中的g 43 43 和gcc工具可以解决
  • CDN和Akamai

    最近在看分布式相关的东西 xff0c 在看到HTTP Caching的时候 xff0c 提到CDN和Akamai 以前对这些东西都是一无所知啊 记录一下吧 http zh wikipedia org wiki E5 85 A7 E5 AE
  • 在Centos7环境安装GitLab

    https about gitlab com install centos 7 1 Install and configure the necessary dependencies On CentOS 7 and RedHat Oracle
  • 免费的天气api

    这是最近网上查询到关于天气的api xff0c 大部分的接口都是收费 xff0c 有部分接口虽然免费 xff0c 但查询到的信息量特别不全 但好在有几个免费接口倒是不错 xff0c 倒是可以使用 免费的天气api 高德地图 天气查询免费ap
  • Enlightenment官网介绍

    Enlightenment和EFL的官方网站 xff1a http www enlightenment org Enlightenment xff1a Enlightenment 是一个旗舰项目 它曾经是一个不起眼的 X11 窗口管理器 W
  • Enlightenment 是窗口管理器,Enlightenment 是桌面外壳,Enlightenment是创建漂亮应用程序的材料

    Enlightenment 是窗口管理器 xff0c Enlightenment 是桌面外壳 xff0c Enlightenment是创建漂亮应用程序的材料 xff0c Enlightenment xff0c 或者简单的一个 e xff0c
  • ubuntu安装nvidia显卡驱动报错:”The CC version check failed”

    参考过不少博主回答的问题 xff0c 但都存在很多问题 xff0c 或者比较麻烦 xff0c 给大家推荐一下我自己尝试解决后比较好的一个方案 xff1a 出现这个问题的原因是因为驱动可能比较新 xff0c 系统内核的gcc版本和编译器的默认
  • codeforces1169C 二分答案+思维

    1169C 1700的题 xff0c 然而比赛的时候没有做出来 题意 xff1a 给你一个n表示序列长度为n xff0c 还有一个m表示这个序列的最大值小于m 然后对这个数组进行多次操作 xff0c 一次操作为 对ai xff0c aj x

随机推荐

  • python用pip装第三方库numpy时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordi

    python用pip装第三方库numpy时一直报错 xff1a UnicodeDecodeError 39 ascii 39 codec can 39 t decode byte 0xc3 in position 7 ordinal not
  • debian8 jessie 更换为国内源

    编辑 etc apt sources list文件 xff1a 用 注释掉老的源 添加新的源 xff0c deb http mirrors 163 com debian jessie main non free contrib deb ht
  • 09、Flutter FFI Dart Native API

    Flutter FFI 学习笔记系列 Flutter FFI 最简示例 Flutter FFI 基础数据类型 Flutter FFI 函数 Flutter FFI 字符串 Flutter FFI 结构体 Flutter FFI 类 Flut
  • Copilot 自动编程AI工具

    OpenAI与GitHub联合构建的AI自动编程工具Copilot xff0c Copilot基于自然语言处理模型GPT 3搭建而成 xff0c Copilot预览版已经正式上线Visual Studio Code平台 OpenAI的GPT
  • SQLite的SQL语法

    SQLite库可以解析大部分标准SQL语言 但它也省去了一些特性 并且加入了一些自己的新特性 这篇文档就是试图描述那些SQLite支持 不支持的SQL语法的 查看关键字列表 如下语法表格中 xff0c 纯文本用蓝色粗体显示 非终极符号为斜体
  • 动态链接库dll(Windows/C++)

    1 概念 xff08 1 xff09 动态链接库广泛用于Windows系统及应用程序 xff0c 不能单独被执行 xff0c 在应用程序运行期间被动态调用的模块文件 区别于静态链接库 xff0c 均属于独立的代码编译模块 xff0c 但静态
  • 【Java】反射时获取父类属性并赋值

    1 反射获取父类 在反射获取类里的所有属性的时候 xff0c 会遇到无法访问父类extends里面的值 这时候需要访问父类需要调用Class的方法getSuperclass 对父类进行遍历field 同时如果不想遍历到Object或者某个类
  • linux软件包安装命令——apt-get

    apt get是linux中APT软件包的管理工具 采用shell命令行的方式完成软件的安装 更新 卸载等操作 1 语法 apt get xff08 选项 xff09 xff08 参数 xff09 选项 xff1a c 指定配置文件 o 直
  • 浅谈路由器的wan、lan、wlan口和vlan/trunk口

    背景 另一篇博文分析了一个实际的路由问题 xff0c 为方便问题分析 xff0c 在此列出常用概念 vlan中的trunk口 VLAN Trunk以及三层交换 可以把switch某一端口设为trunk 端口 问题 IP地址分类 xff1a
  • bzoj4864 [BeiJing 2017 Wc]神秘物质

    http www elijahqi win 2018 01 26 bzoj4864 beijing 2017 wc E7 A5 9E E7 A7 98 E7 89 A9 E8 B4 A8 20 E2 80 8E Description 21
  • mysql8设置远程连接详细教程

    这是转载StackOverFlow上的回答 xff0c 原回答点此这里 Remote Access in MySQL 8 Allow access from any host sudo nano etc mysql mysql conf d
  • 倒水问题(bfs)

    题意概述 34 fill A 34 表示倒满A杯 xff0c 34 empty A 34 表示倒空A杯 xff0c 34 pour A B 34 表示把A的水倒到B杯并且把B杯倒满或A倒空 Input 输入包含多组数据 每组数据输入 A B
  • A-化学

    题目概述 假设如上图 xff0c 这个烷烃基有6个原子和5个化学键 xff0c 6个原子分别标号1 6 xff0c 然后用一对数字 a b 表示原子a和原子b间有一个化学键 这样通过5行a b可以描述一个烷烃基 你的任务是甄别烷烃基的类别
  • B-评测系统

    题目概述 例如某次考试一共八道题 xff08 A B C D E F G H xff09 xff0c 每个人做的题都在对应的题号下有个数量标记 xff0c 负数表示该学生在该题上有过的错误提交次数但到现在还没有AC xff0c 正数表示AC
  • week4_C TT的神秘礼物

    题目描述 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT
  • week8_C 班长竞选(Kosaraju算法 SCC缩点)

    题目描述 大学班级选班长 xff0c N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 xff0c 意见具有传递性 xff0c 即 A 认为 B 合适 xff0c B 认为 C 合适 xff0c 则 A 也认为 C 合
  • week15实验 D_瑞瑞爱上字符串/F_东东:“来不及解释了,快上车!!”

    D 瑞瑞爱上字符串 题目 瑞瑞最近迷上了字符串 xff0c 因此决定出一个字符串的题 给定两个正整数 N K xff0c 考虑所有由 N 2 个 a 和 2 个 b 组成的字符串 xff0c 要求输出其中字典序第 K 小的 例如当 N 61
  • CSP-M4补题 A_TT数鸭子

    题目 这一天 xff0c TT因为疫情在家憋得难受 xff0c 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 xff0c 看到了许多在湖边嬉戏的鸭子 xff0c TT顿生羡慕 此时他发现每一只鸭子都不 一样
  • 第二道月模csp201604-3 路径解析

    题目 在操作系统中 xff0c 数据通常以文件的形式存储在文件系统中 文件系统一般采用层次化的组织形式 xff0c 由目录 xff08 或者文件夹 xff09 和文件构成 xff0c 形成一棵树的形状 文件有内容 xff0c 用于存储数据
  • 第三道月模csp201609-3炉石传说

    题目 炉石传说 xff1a 魔兽英雄传 xff08 Hearthstone Heroes of Warcraft xff0c 简称炉石传说 xff09 是暴雪娱乐开发的一款集换式卡牌游戏 xff08 如下图所示 xff09 游戏在一个战斗棋