P2628 冒险岛 AC于2018.10.31
原题
题目背景
冒险岛是费老师新开发的一种情景模拟电脑的游戏,通过掷骰子(1~6个数字之间),让一种人物(棋子)在棋纸上从左至右的行走,从而模拟冒险的故事……
题目描述
棋纸上有一条从左至右的很长的路,整条路是一连串符号组成,表明路的状况,棋子必须在符号组成的路上行走。每掷一下骰子得到的数字,棋子就可以走掷得的数字所对应的步数,比如掷3,就可以走3步。
路上有两种特殊符号可以改变棋子的行走。
一种是“>”符号,一旦棋子走完了掷骰子的步数,最终停留在这个符号上,后面有紧跟着2个以上“>”,那么棋子就可以获得前进奖励,可以沿着“>”一直一步步前进,直到遇到一个不是“>”的符号位置停下来。
还有一种是“*”符号,一旦棋子走完了掷骰子的步数,最终停留在这个符号上,后面又紧跟着两个以上“*”,就要受到后退惩罚,需要退后k步,这个k步就是从当前“*”开始的连续的“*”的数量。
每次掷数后,奖励或惩罚至多一次,如果奖励或惩罚后棋子又落在第二种特殊符号上,则不能再受到奖励或惩罚。
如果走的棋子超出棋纸右边界最后一个符号,则停在最后一个符号上;如果超出左边界,则停在第一个符号上。
若干次掷骰子后,请问游戏中的人物(棋子)走到了哪步?离终点还差几步?
输入输出格式
输入格式:
第一行为一个字符串s,字符串中的每个字符表示棋纸的路的状况。
第二行是一个n,表示掷了n次骰子。
第三行是n个整数(1~6的范围),表明掷了n次骰子得到的数字,数字之间有一个空格。
输出格式:
只有两个数字,表明目前所在符号的序号和离终点符号的步数,数子中间有一个空格。注意输出末尾有换行。
输入输出样例
输入样例#1:
yhfA>>>fhsdfa***>>>foaoad 3 5 6 6
输出样例#1:
20 5
说明
【样例说明】
在游戏中,第一次掷的是5,则走到第一个>的位置,获得奖励前进至左起第二个f处。第二次掷的是6,则走到*的位置,受惩罚退3步,至d处。第三次掷的是6,则走至左起第四个>号处,获奖励前进至f。最终棋子停留的符号是第20个(从左至右的数),离终点符号d(含)相差5步数。
【数据范围】
对于50%的数据,1<=s的长度<=255,0<=n<=1000。
对于100%的数据,256<=s的长度<=1000000,0<=n<=100000。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000010];
int add[1000010],a[1000010];
int main()
{int len,i,k,n;gets(s);len=strlen(s)-1; //要减去换行符所占的长度 scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=len-1;i>=0;i--){ //从后往前预处理奖励或惩罚的点 if(s[i]=='>'){if(s[i+1]!='>')add[i]=1;elseadd[i]=add[i+1]+1;}if(s[i]=='*'){if(s[i+1]!='*')add[i]=1;elseadd[i]=add[i+1]+1;}}a[1]--; //由于所有测试数据的起点都为-1,所以第一步只能走啊a[1]-1步 k=0;for(i=1;i<=n;i++){k+=a[i];if(add[k]>=3){if(s[k]=='>')k+=add[k];elseif(s[k]=='*')k-=add[k];}if(k<0) //如果当前位置越出边界,则让它回到边界 k=0;if(k>len-1)k=len-1;}k++;//题目中的第一个字符的位置是一,输入的字符串的第一个字符的位置是零,故需再次加上一 printf("%d %d\n",k,len-k);return 0;
}
P2628 冒险岛 AC于2018.10.31相关推荐
- 训练日志 2018.10.31
上周把图的连通性看完了,也做了些有关的题. 图的遍历内容的欧拉回路 Fleury 算法还不太熟练,哈密尔顿回路还没开始,这周争取把图的遍历以及拓扑排序看完,再做些题. 2018.10.31
- 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31
10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...
- 2018.10.31模拟赛
T1 lgg L 君和 G 君在玩一个游戏.G 君写下一个字符串 A,L 君将其复制一遍连接到 A 串后面得 到字符串 B, G 君又在 B 的任意位置(包括首尾)插入一个字符得到字符串 C.现在你得 ...
- ssl提高组周三备考赛【2018.10.31】
前言 呆学校呆3天依旧不想复习期中,感觉要凉. 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017mysel ...
- Noip 模拟 13 2018/10/31
T1:铃仙的红色之瞳(eyes) 为了方便你的预测,铃仙对该符卡进行了改造. 敌方非常强大,可以看作有无限的体力.通过该符卡,铃仙可以释放出子弹,敌方触碰到子弹就会损失一格体力.注意,每次敌方损失体力 ...
- Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)
题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...
- 【比赛报告】2018.10.15校赛[2015-9-13 NOIP模拟赛 by hzwer] NOIP练习赛卷十四
比赛时间:2018.10.15 选手:lrllrl 用时:2h 得分:100+10+90=200 最初想法是一个背包问题.首先背包问题的模型肯定是不行的,但是我们可以列出状态转移方程后发现,每个状态决 ...
- 10.31纪中DAY3_公牛和母牛 气象牛 轻轨 设计
noip2019-counting down three weeks 纪中day3 (头发日益稀少) 10.31纪中B组notes 公牛和母牛(USACO FEB09 Problem 'bullcow ...
- DayDayUp:广东卫视2018.12.31—2019财经跨年《遇见2018•预见2019》重点概览【文字+视频】
DayDayUp:广东卫视2018.12.31-2019财经跨年<遇见2018•预见2019>重点概览[文字+视频] 警告:禁止一切形式的粘贴复制!如转载敬请留言告知!感谢尊重知识!尊重版 ...
最新文章
- uoj 117 欧拉回路
- 数据中心UPS电池故障引起火灾导致澳大利亚医院系统业务中断
- EF中加载实体的方式
- centos7编译安装php7.3
- [Python3] 015 冰冻集合的内置方法
- java给你的初步印象_Java之初印象
- 原来Java大数据才是真正的高富帅!
- 14.图像透视——人类视觉,平行线测验,其他模型,乐趣与角度_4
- Linux下PCI设备驱动程序开发[转]
- Android常用工具类 (转)
- 例4.4 最大公约数 - 九度教程第47题(最大公约数GCD)
- hibernate 3中要注意的地方
- other|2019最新PayPal二代支付接口Smart Payment Buttons开发
- 怎么用计算机弹植物大战僵尸,[原创] CE基础-自动汇编:植物大战僵尸之子弹回旋...
- 解决 :No active profile set, falling back to default profiles: default 问题
- 面试时被问有没有别家offer,回答没有,面试总是挂!回答有,就说我是面试选手,欺骗公司!...
- LiveGBS如何配置安防摄像头云端录像存储回放
- 科研,办公几款强大又实用的软件(含安装包)
- 教你如何把一张图片做成一段视频
- 简单做一段自己CSGO游戏的视频