[USACO 2010 Open Silver 3.Time Travel]——链表
Description
约翰得到了一台时光机,他可以用这台机器回到过去(但不能到未来),改变他家的牛群。约翰 打算依次进行 N 步操作,每步操作分为三种:
• 买入操作以 a 表示,后接一个参数 i,表示约翰新买了一头编号为 i 的奶牛,将其放入牛棚
• 卖出操作以 s 表示,表示约翰会将牛棚中最近买入的一头奶牛卖掉
• 时光倒流的操作以 t 表示,后接一个参数 k,表示约翰将发动时光机,牛棚将返回到第 k 步操 作之前的状态
请帮助约翰记录牛棚里的奶牛信息,每当执行完一步操作后,输出目前在牛棚里的最近买入的奶牛, 如果当时牛棚里没有奶牛了,输出 −1。
Input Format
第一行:单个整数 N ,1 ≤ N ≤ 80000
• 第二行到 N + 1 行:每行代表一步操作,开头有一个小写字母
– 如果是 a,表示买入操作,后接一个参数 i,1 ≤ i ≤ 1000000
– 如果是 s,表示卖出操作
– 如果是 t,表示时光倒流的操作操作,后接一个参数 k,若这是第 i + 1 行,则 1 ≤ k ≤ i
Output Format
• 第一行到第 N 行:第 i 行有一个整数,表示在第 i 步操作后,在牛棚里最近买入的奶牛,如果 当时牛棚里没有奶牛,输出 −1
Sample Input
12
a 5
a 3
a 7
s
t 2
a 2
t 4
a 4
s
t 7
s
s
Sample Output
5
3
7
3
5
2
7
4
7
2
5
-1
Q# Query Owned Cows Output Comments
1 a 5 -> [5] => 5 Add a new cow with ID 5
2 a 3 -> [5,3] => 3 Add a new cow with ID 3
3 a 7 -> [5,3,7] => 7 Add a new cow with ID 7
4 s -> [5,3] => 3 Sell recent cow 7
5 t 2 -> [5] => 5 Revert time to before query 2
6 a 2 -> [5,2] => 2 Add a new cow with ID 2
7 t 4 -> [5,3,7] => 7 Revert time to before query 4
8 a 4 -> [5,3,7,4] => 4 Add a new cow with ID 4
9 s -> [5,3,7] => 7 Sell recent cow 4
10 t 7 -> [5,2] => 2 Revert time to before query 7
11 s -> [5] => 5 Sell recent cow 2
12 s -> [] => -1 Sell recent cow 5 这道题如果没有t操作就是模拟出栈入栈过程,但现在却多了一个时光倒流操作,问题明显没有那么简单了。你不能记录每个时刻的操作然后真的模拟时光回溯。
但可以发现每次查询只关注栈顶元素,所以我们可以采用链表来实现时光回溯,开两个数组q[i]表示i时刻栈顶元素,s[i]表示i时刻由s[i]时刻过来的。
最后附上代码。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int q[80001];
int s[800001];
int n;
char c[10];
int x;
int main()
{
scanf("%d",&n);
q[0]=-1;
for(int i=1;i<=n;i++)
{
scanf("%s",c);
if(c[0]=='a')
{
scanf("%d",&x);
q[i]=x;
s[i]=i-1;
}
if(c[0]=='s')
{
q[i]=q[s[i-1]];
s[i]=s[s[i-1]];
}
if(c[0]=='t')
{
scanf("%d",&x);
q[i]=q[x-1];
s[i]=s[x-1];
}
printf("%d\n",q[i]);
}
}
[USACO 2010 Open Silver 3.Time Travel]——链表的更多相关文章
- USACO翻译:USACO 2013 NOV Silver三题
USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...
- USACO翻译:USACO 2013 DEC Silver三题
USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- USACO翻译:USACO 2012 FEB Silver三题
USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...
- USACO翻译:USACO 2014 FEB SILVER 三题
USACO 2014 FEB SILVER 一.题目概览 中文题目名称 自动打字 路障 神秘代码 英文题目名称 auto rblock scode 可执行文件名 auto rblock scode 输 ...
- USACO 2013 Nov Silver Pogo-Cow
最近因为闲的蛋疼(停课了),所以开始做一些 USACO 的银组题.被完虐啊 TAT 貌似 Pogo-Cow 这题是 2013 Nov Silver 唯一一道可说的题目? Pogo-Cow Descri ...
- NC24724 [USACO 2010 Feb S]Chocolate Eating
NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...
- USACO翻译:USACO 2014 MARCH Silver三题
USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooo ...
- usaco 2010年3月银组题解
usaco银组解题报告 一.石子游戏如果把‘O’当作0,‘X’当做1,则N个洞的每一种状态都可以看做是一个N位二进制数.于是,这个问题就变成了求环绕的N位格雷码.幸运的是,这个结构很容易就能够用一个简 ...
随机推荐
- Omi框架学习之旅 - 组件 及原理说明
hello world demo看完后其实基本的写法就会了. 但是omi中的组件是神马鬼?其实我也不知道组件是啥. 百度百科是这么说的: 是对数据和方法的简单封装.es6中,一个类其实也可以做到对方法 ...
- https原理简析
[转]http://www.cnblogs.com/carsonzhu/p/5225778.html HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手 ...
- CF1028G Guess the Numbers 构造、记忆化搜索
传送门 考虑如果我们当前可以询问\(x\)个数,还剩下\(q\)次询问机会,我们要怎么构造询问方式? 肯定会这么考虑: 找到一个尽可能大的\(P\)满足\([x,P]\)能在每一次能询问\(x\)个数 ...
- 复习C#的方法Math.Max和Math.Min
温故而知新,今天学习Math.Max和Min的方法.这2个方法,均需要传入2个参数,返回参数中最大值和最小值. class Ac { public void LeanMathFunction() { ...
- WPF模拟探照灯文字
原文:WPF模拟探照灯文字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1835936 ...
- Codeforces 718C solution
C. Sasha and Array time limit per test : 5 seconds memory limit per test : 256 megabytes Descrip ...
- SqlServer 案例:已有汽车每日行驶里程数据,计算其每日增量
需求说明 某公司某项业务,需要获得用户每日行车里程数.已知能获得该车每日提交的总里程数,如何通过 T-SQL 来获得其每日增量里程? 解决方案 首选需要对数据进行编号,利用开窗函数 OVER() 实现 ...
- .net core实践系列之短信服务-Sikiro.SMS.Bus服务的实现
前言 前两篇<.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现>.<.net core实践系列之短信服务-Api的SDK的实现与测试>分别讲解了AP ...
- Redis未授权访问漏洞的利用及防护
Redis未授权访问漏洞的利用及防护 什么是Redis未授权访问漏洞? Redis在默认情况下,会绑定在0.0.0.0:6379.如果没有采取相关的安全策略,比如添加防火墙规则.避免其他非信任来源IP ...
- Centos6.9下RabbitMQ集群部署记录
之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...