当前位置: 首页 > news >正文

2014-2015 ACM-ICPC, NEERC, Northern Subregional Contest I-Instruction(模拟)

题意:

给若干个开关和若干个站台共n个(n<=51),以及其上属开关,如果是站台的话,还给出其字符标志。火车在开关以及站台之间移动只花费1min。然后给m个火车的到达时间以及要前往的站台(m<=1000),初始时开关是连向编号较小的下属,问需要进行的开关切换时间以及其编号。

每个开关会有两个下属,站台没有下属。

思路:

贼难读...可以发现满足二叉树,因此建树进行模拟即可,即把所有开关作为分支节点,所有站台作为叶子节点,每个节点设立一个01状态,表示当前连向的下属是左子树还是右子树。模拟即可。。由于节点个数最多只有51个,暴力寻找目标叶节点就可以,不过我对建好的树先进行一次中序遍历,将树转化成排序二叉树,这样再寻找目标就方便了许多。

代码:

#include <bits/stdc++.h>
using namespace std;
struct node
{
	int key;
	int id, lson, rson;
} g[100];
int _ids[50];
char ch;
int n, m, cnt, fa, _time;
int bh;
vector<pair<int, int> > vt;
bool cmp(pair<int, int>p1, pair<int, int>p2)
{
	return p1.second < p2.second;
}
void dfs(int rt)
{
	if(g[rt].lson != -1) dfs(g[rt].lson);
	g[rt].id = bh++;
	if(g[rt].rson != -1) dfs(g[rt].rson);
}
void work(int rt, int dep, int val)
{
	if(g[rt].id == val) return;
	if(g[rt].id > val)
	{
		if(g[rt].key == 0)
		vt.push_back(make_pair(rt, _time+dep));
		g[rt].key = 1;
		work(g[rt].lson, dep+1, val);
	}
	else 
	{
		if(g[rt].key == 1)
		vt.push_back(make_pair(rt, _time+dep));
		g[rt].key = 0;
		work(g[rt].rson, dep+1, val);
	}
}
int main()
{
	freopen("instruction.in","r",stdin);  
	freopen("instruction.out","w",stdout); 
//	freopen("in.txt", "r", stdin); 
	memset(_ids, 0, sizeof _ids);
	vt.clear();
	scanf("%d", &n);
	cnt = 0, g[0].lson = g[0].rson = -1;
	for(int i = 1; i <= n; ++i)
	{
		scanf(" %c %d", &ch, &fa);
		g[++cnt].key = 1;
		g[cnt].lson = g[cnt].rson = -1;
		if(g[fa].lson == -1) g[fa].lson = cnt;
		else g[fa].rson = cnt;
		if(ch == 'p')
		{
			scanf(" %c", &ch);
			_ids[ch-'a'] = cnt;
		}
	}
	bh = 0; dfs(0);
	scanf("%d", &m);
	for(int i = 1; i <= m; ++i)
	{
		scanf("%d %c", &_time, &ch);
		int t = _ids[ch-'a'];
		work(1, 1, g[t].id);
	}
	
	sort(vt.begin(), vt.end(), cmp);
	printf("%d\n", vt.size());
	for(int i = 0; i < vt.size(); ++i)
	printf("%d %d\n", vt[i].first, vt[i].second);
	return 0;
}


继续加油~

相关文章:

  • jquery常用技巧及常用方法列表集合
  • Codeforces Round #439 (Div. 2) C.The Intriguing Obsession(组合数、记忆化搜索)
  • (第一天)包装对象、作用域、创建对象
  • UOJ-79 一般图的最大匹配(带花树模板求解)
  • POJ-2823 POJ-3250 (单调队列 单调栈)
  • 关于量价十八则的口诀
  • HDU-3478 Catch(二分图染色+并查集)
  • RSA密钥的生成与配置
  • POJ 2536 Gopher II
  • HDU-1043 Eight(经典八数码问题, A*+康拓+曼哈顿距离+逆序数判断可解性、双向搜索)
  • codeforces-510E Fox And Dinner(带限制的二分图多重匹配+奇偶建图+打印路径)
  • C-Cleaning Pipes(判断两线段相交+二分图判定) 2015-2016 Northwestern European Regional Contest (NWERC 2015)
  • eclipse the user operation is waiting for building workspace to complete
  • 2-SAT 题目整理
  • 64位windows2003 未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序
  • 网络传输文件的问题
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【Leetcode】104. 二叉树的最大深度
  • 【RocksDB】TransactionDB源码分析
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 5、React组件事件详解
  • git 常用命令
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue.js-Day01
  • Vue2 SSR 的优化之旅
  • Vue实战(四)登录/注册页的实现
  • 翻译:Hystrix - How To Use
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 开源SQL-on-Hadoop系统一览
  • 离散点最小(凸)包围边界查找
  • 如何胜任知名企业的商业数据分析师?
  • 正则学习笔记
  • # Maven错误Error executing Maven
  • (07)Hive——窗口函数详解
  • (16)Reactor的测试——响应式Spring的道法术器
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (全注解开发)学习Spring-MVC的第三天
  • (五)MySQL的备份及恢复
  • (转)EXC_BREAKPOINT僵尸错误
  • **PHP分步表单提交思路(分页表单提交)
  • .NET CLR Hosting 简介
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 使用配置文件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net各种迷惑命名解释
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET中的十进制浮点类型,徐汇区网站设计
  • // an array of int
  • @Conditional注解详解
  • @JoinTable会自动删除关联表的数据
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ C++ ] 继承