4260: 游戏高手
描述
zzd是一位游戏高手,有一天,他接触了一款很酷也很难的游戏。
但是他依然无压力的通关了,下面有几种记录,可以描述他通关的过程。
(1). START T 表示他在T(现实中的)时间开始了这一关。
(2). SAVE T 表示他在T时间对进度进行了保存。
(3). LOAD T 表示他在T时间读取了进度。此时将回到他最近保存的进度,若无保存记录,则回到游戏的开始。
(4). FAIL T 表示他的角色在T时间挂掉了,任务失败。此时系统将自动退回他上一次读取的进度,若无读取记录,则回到游戏的开始。
(5) FINISH T 表示他在T时间过关了。
例:
他在第0秒开始游戏,在第10秒保存了进度(游戏时间第10s),在第20秒读取了进度(回到游戏时间第10s的进度),在第30秒保存了进度(游戏时间第20s),在第40秒失败(回到游戏时间第10s的进度),第50秒过关(游戏时间第20s)。
给出一组记录,请问他通关时的游戏时间是多少。
输入
题目数据有多组,请读入至文件结束。
每组数据第一行为一字符串和一整数,由空格隔开:
START T
之后若干行“字符串(空格)整数”,表示游戏的记录。
最后一行为一字符串和一整数,由空格隔开:
FINISH T
(每一组数据的T保证是递增的,且0<=T<2^31)
输出
对于每组数据,输出一整数。即他通关时的游戏时间。
样例输入
START 0
SAVE 10
LOAD 20
SAVE 30
FAIL 40
FINISH 50
样例输出
20
题目来源
题目链接:http://tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=4260
模拟,根据题目意思一步步下去即可,代码中有详细的注释,请直接查看代码。
#include <bits/stdc++.h> using namespace std; int main() { string s; int n,st,sum=0,si,sk; while(cin>>s>>n) { if(s=="START") { //开始游戏,初始时间为n st=n; } else if(s=="FAIL") { //初始化开始游戏时间 st=n; //总游戏时间重新加载为前面保存的时间 sum=si; } else if(s=="LOAD") { //加载游戏 //初始化开始游戏时间 st=n; //总游戏时间重新加载为前面保存的时间 sum=sk; //保存下游戏时间,便于死亡加载 si=sum; } else if(s=="SAVE") { //保存游戏 //游戏时间增加n减去前面开始游戏的时间 sum+=(n-st); //保存下 这次存档前面的游戏时间,便于后续加载 sk=sum; //重置开始游戏时间 st=n; } else if(s=="FINISH") { //输出游戏时间 cout<<sum+(n-st)<<endl; //多组数据结束归零 sum=0,si=0,sk=0; } } }