博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ-3897 Fiddlesticks
阅读量:4123 次
发布时间:2019-05-25

本文共 2070 字,大约阅读时间需要 6 分钟。

#include 
#include
#include
#include
using namespace std;int T, n, c, cnt, sum, ans;int HP[25];struct node{ int num; //HP的下标 int dir; //方向----正方向为1,反方向为-1} temp;void change(){ temp.num += temp.dir; if(temp.num < 0) //攻击第一个后 攻击最后一个 temp.num = n - 1; if(temp.num == n) //攻击最后一个后 攻击第一个 temp.num = 0;}void attack(){ queue
process; while(!process.empty()) process.pop(); temp.num = 0; //初始下标0 temp.dir = 1; //初始方向正向 process.push(temp); while(!process.empty()) { temp = process.front(); process.pop(); if(HP[temp.num] <= 0) //如果HP <= 0 投入下一个 对 cnt sum 不做处理 { if(temp.dir == 1) { change(); process.push(temp); } else { change(); process.push(temp); } continue; } HP[temp.num] -= c; //减少HP cnt --; //剩余攻击次数减少 if(!cnt) //如果攻击次数为0 弹出这次的num { ans = temp.num + 1; //因为num从0开始 break; } if(HP[temp.num] > 0) { change(); process.push(temp); } else { sum --; if(!sum) //如果敌人全死 弹出这次的num { ans = temp.num + 1; break; } temp.dir = - temp.dir; //杀死敌人后 反向攻击 change(); process.push(temp); } }}int main(){ scanf("%d", & T); while(T --) { scanf("%d %d", & n, & c); sum = n; //总敌人数(用来判断敌人是否全死) cnt = n + 5; //总攻击次数(用来判断是否可以继续攻击) for(int i = 0; i < n; i ++) scanf("%d", & HP[i]); attack(); //开始执行攻击 printf("%d\n", ans); }}

题意:

有n个敌人,稻草人E技能乌鸦最多能弹n + 5次,从1开始弹到最后,从最后弹到第1个(也就是循环弹)。每死一个敌人,乌鸦就会反向攻击。直到敌人死光或者攻击次数用完。输出最后一个被攻击的敌人序号。

题解:

用一个队列模拟过程,投进一个敌人的序号,如果HP>0,就攻击他并弹出(表示结束攻击),并按着方向,继续投入。

转载地址:http://mctpi.baihongyu.com/

你可能感兴趣的文章
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>
C语言-预处理指令3-文件包含
查看>>
C语言-变量类型
查看>>
C语言-static和extern关键字1-对函数的作用
查看>>
C 语言-static和extern关键字2-对变量的作用
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
还不会正则表达式?看这篇!
查看>>
100道+ JavaScript 面试题,助你查漏补缺
查看>>
JavaScript深入理解之闭包
查看>>