TZOJ--4260: 游戏高手(模拟)

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

题目来源

TOJ

 

题目链接: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;
		}
	}
	
}

  

原文地址:https://www.cnblogs.com/Anidlebrain/p/10113977.html