Problem I. Instruction

题目连接:

http://codeforces.com/gym/100531/attachments

Description

Ingrid is a head of a big railway station and, among other duties, is responsible for routing trains to the

right platforms. The station has one entrance, and there are many switches that direct trains to other

switches and platforms.

Each switch has one inbound track and two outbound tracks, platforms have one inbound track, and

station entrance has one outbound track. Each outbound track is connected to one inbound track and

vice versa. Every switch and platform is reachable from station entrance.

Platforms have a rail dead ends and you may assume that trains disappear from the platform immediately

after arriving to it.

Each morning Ingrid looks at the timetable and writes switch toggling instruction: when and which

switch to toggle. She would like to automate this process to save a lot of time.

Input

The first line of the input file contains a single integer n — the total number of switches and platforms

on the station (3 ≤ n ≤ 51).

The i-th of the following n lines describes a switch or a platform with an index i. Description starts with

a character ‘p’ for a platform or ‘s’ for a switch. Next number qi

indicates the number of the switch the

inbound track is connected to or 0 if it is connected to station entrance (0 ≤ qi < i). Description of the

platform also contains a unique lowercase English letter — the platform identifier.

Trains spend exactly one minute to move between two connected switches or a switch and a platform.

In the morning, each switch is toggled in a way that a train would pass to the one of the two outbound

tracks connected to the switch/platform with the lower number.

Next line of the input file contains a single integer m (1 ≤ m ≤ 1000) — the number of trains in timetable.

Each of the following m lines contains integer ai (0 ≤ ai ≤ 10 000; ai > ai−1) — the time in minutes

when a train arrives to the station entrance, and the letter pi — identifier of the destination platform for

this train.

Output

In the first line output integer c — the number of commands in the switch toggling instruction. For each

command, output two integers si and ti (1 ≤ si ≤ n; 0 ≤ ti ≤ 109

) — the number of the switch and the

time to toggle it. Assume that the switch is toggled between minutes ti − 1 and ti

.

Output commands in order of non-decreasing time. The number of commands should not exceed 100 000

Sample Input

7

s 0

s 1

s 1

p 2 a

p 2 b

p 3 c

p 3 d

5

0 a

1 c

3 b

4 a

5 d

Sample Output

6

1 2

1 4

2 4

2 6

1 6

3 7

Hint

题意

给你一个像二叉树的火车站,一开始,所有点都指向最小的节点,你按动开关就会使得一个点指向另外一个儿子

然后现在有很多个火车会从起点走到他想去的叶子节点,然后请你输出一个可行解

题解:

我们一个火车一个火车分析就好了

当火车去序号小的,就不动开关,如果去序号大的,就动开关,当他过了之后,就再动一下开关,使得又指向小的就好了

代码

#include<bits/stdc++.h>
using namespace std; int n;
map<char,int> H;
vector<int> E[3000];
vector<int>ans1[30000];
vector<int>temp1,temp2;
void solve(int x,int time,int fin)
{
//cout<<x<<" "<<time<<" "<<fin<<endl;
if(x==fin)
{
for(int i=0;i<temp1.size();i++)
ans1[temp2[i]].push_back(temp1[i]);
return;
}
for(int i=0;i<E[x].size();i++)
{
if(i==1)
{
temp1.push_back(x);
temp1.push_back(x);
temp2.push_back(time);
temp2.push_back(time+1);
}
solve(E[x][i],time+1,fin);
if(i==1)
{
temp1.pop_back();
temp1.pop_back();
temp2.pop_back();
temp2.pop_back();
}
}
}
int main()
{
freopen("instruction.in","r",stdin);
freopen("instruction.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
if(s=="s")
{
int x;
scanf("%d",&x);
E[x].push_back(i);
}
if(s=="p")
{
int x;
scanf("%d",&x);
char c;cin>>c;
H[c]=i;
E[x].push_back(i);
}
}
int q;scanf("%d",&q);
for(int i=0;i<q;i++)
{
int t;scanf("%d",&t);
char c;cin>>c;
solve(0,t,H[c]);
}
int sum = 0;
for(int i=0;i<30000;i++)
sum+=ans1[i].size();
cout<<sum<<endl;
for(int i=0;i<30000;i++)
for(int j=0;j<ans1[i].size();j++)
cout<<ans1[i][j]<<" "<<i<<endl;
}

Codeforces Gym 100531I Instruction 构造的更多相关文章

  1. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】

     2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...

  2. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  3. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  4. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  5. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  6. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  7. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  8. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  9. Codeforces Gym 100187K K. Perpetuum Mobile 构造

    K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...

随机推荐

  1. 把php.exe加入系统环境变量-使用命令行可快速执行PHP命令

    有时候在执行长时间运行的脚本程序的时候,浏览器是架不住的.我们就可以使用CMD命令行或者LINUX命令行执行PHP程序 1.把PHP.EXE加入到环境变量,不用每次都进入到PHP的目录 ①  右击我的 ...

  2. 用physdiskwrite在VMware虚拟机上安装m0n0wall【转】

    在一台PC机上安装m0n0wall,相信大家都有经验.一般采用两种方法:1.在一台Windows XP或Windows 2000的PC上,下载physdiskwrite软件和m0n0wall映像文件( ...

  3. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  4. SQL Server 2008 备份改进版

    1.Add compressing function with 7-Zip 2.With tool win.rar code so you can change it if you want USE ...

  5. effective c++:private继承

    如果class间使用private继承关系,编译器就不会自动的将派生类转换为基类,而且private继承而来的成员都变为private属性. private继承意味着根据某物实现出,当我们想要避免重复 ...

  6. 分享一些前端chm文档

    分享地址:http://yun.baidu.com/share/link?shareid=39230983&uk=1008683945 对于网络不好的人来说,离线文档更加方便.打开速度更快. ...

  7. PHP获取本周开始时间

    /*先设置时区*/date_default_timezone_set('PRC');/*网上的写法:总觉得这周跨年或者跨月的时候会悲剧 未验证*/echo mktime(0,0,0,date('m') ...

  8. Android:控件WebView显示网页 -摘自网络

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要 ...

  9. 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

    原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和  ...

  10. deque 居然已经实现了 insert 接口

    最近有个开发需求,根据server传递来的广告位来展示某条广告. 但最终存储广告的数据结构是deque,里面存储的东西还是对象(stl 基于拷贝语义). 想了半天,在开头和结尾插入比较方便,在中间插入 ...