洛谷 p2628 冒险岛

题目来源: P2628 冒险岛 - 洛谷

时空限制:1000ms/128MB

题目背景:冒险岛是费老师新开发的一种情景模拟电脑的游戏,通过掷骰子(1~6个数字之间),让一种人物(棋子)在棋纸上从左至右的行走,从而模拟冒险的故事……

题目描述:棋纸上有一条从左至右的很长的路,整条路是一连串符号组成,表明路的状况,棋子必须在符号组成的路上行走。每掷一下骰子得到的数字,棋子就可以走掷得的数字所对应的步数,比如掷3,就可以走3步。

路上有两种特殊符号可以改变棋子的行走。

一种是“>”符号,一旦棋子走完了掷骰子的步数,最终停留在这个符号上,后面有紧跟着2个以上“>”,那么棋子就可以获得前进奖励,可以沿着“>”一直一步步前进,直到遇到一个不是“>”的符号位置停下来。

还有一种是“*”符号,一旦棋子走完了掷骰子的步数,最终停留在这个符号上,后面又紧跟着两个以上“*”,就要受到后退惩罚,需要退后k步,这个k步就是从当前“*”开始的连续的“*”的数量。

每次掷数后,奖励或惩罚至多一次,如果奖励或惩罚后棋子又落在第二种特殊符号上,则不能再受到奖励或惩罚。

如果走的棋子超出棋纸右边界最后一个符号,则停在最后一个符号上;如果超出左边界,则停在第一个符号上。

若干次掷骰子后,请问游戏中的人物(棋子)走到了哪步?离终点还差几步?

输入:

第一行为一个字符串s,字符串中的每个字符表示棋纸的路的状况。

第二行是一个n,表示掷了n次骰子。

第三行是n个整数(1~6的范围),表明掷了n次骰子得到的数字,数字之间有一个空格。

输出:

只有两个数字,表明目前所在符号的序号和离终点符号的步数,数子中间有一个空格。注意输出末尾有换行。

样例输入:


样例输入

样例输出:


样例输出

说明:

样例说明:

在游戏中,第一次掷的是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<bits/stdc++.h>

using namespace std;

string s;

int n,a,cishi=-1,tot=0;

int main() {

getline(cin,s);

scanf("%d",&n);

int length=s.length()-1;

for(int i=1; i<=n; i++) {

scanf("%d",&a);

cishi+=a;

if(cishi>=length) cishi=length-1;

if(s[cishi]=='>'&&s[cishi+1]=='>'&&s[cishi+2]=='>')

while(s[cishi]=='>')cishi++;

else if(s[cishi]=='*'&&s[cishi+1]=='*'&&s[cishi+2]=='*') {

while(s[cishi+tot]=='*')tot++;

cishi-=tot;

}

if(cishi<0)cishi=0;

if(cishi>=length)cishi=length-1;

}

cout<<cishi+1<<' '<<length-1-cishi;

return 0;

}

总结一下:有一些比较坑人的点(对于我这样脑子不大灵光的人)

1.刚开始的时候他还没有在棋盘上,一定要注意!!(卡了我一上午)不注意的话,洛谷上只能AC一半数据点。

2.样例我没过!!!(我的输出是20 4)代码玄学还是样例有误我不晓得,

3.while(s[cishi+tot]=='*')tot++;在判断倒退的时候一定是加上‘*’这个符号的格数,不然还是卡一半数据点。

4.读好题目读好题目读好题目(重要的事情来三遍)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 7,148评论 5 24
  • 你的数学直觉怎么样?你能凭借直觉,迅速地判断出谁的概率大,谁的概率小吗?下面就是 26 个这样的问题。如果你感兴趣...
    cnnjzc阅读 7,488评论 0 12
  • 晴 好 有时间,几经邀请,孩子和我看了个纪录片,人工智能的,孩妈问能听懂多少,“百分之七十吧”,我说“我百分之三十...
    好农民阅读 179评论 0 1
  • 世界上有一个这样的人群“好人”,小编想说的是,好人也分,真好人和假好人,真好人一生会有好福报,而假好人内心确是痛苦...
    浙江继续教育在线阅读 1,487评论 0 0
  • 今天是三八妇女节,又是二月二,正逢我妈妈的生日,首先祝妈妈节日愉快,生日快乐。 妈妈她是个善良、爱勤劳、爱干净的人...
    吴晨昕阅读 309评论 0 1

友情链接更多精彩内容