C++ LOL OJ 计算火车停站方案

【题目描述】

我们都知道,火车沿途会经过各种大大小小的站,火车在可能会跳过某些站不停靠,但是肯定不会连续跳过两站及以上。假设沿途一共会有m个站台(火车起初停靠在第一站),一共有多少种不同的停站方案?

【输入】

输入的第一行为一个整数 T (0 < T < 40),接下来为 T 组测试数据,每组只有一个整数 m (0 < m < 40),表示站台的数量。

【输出】

对于每组测试数据,输出只有一行为一个整数,表示可供选择的方案数。

【算法思想】

1.世界本可以更简单但是有的人就是喜欢没事找事,简单的路走起来觉得不高级,其实,是自己很傻逼;

2.直接使用两个数字就可以解决的事情,笔者生来贱命一条,就喜欢用树的结构上去干,所以说傻逼;

3.直接使用斐波那契数列就可以解决的算法,笔者就是采用了二叉树的宽度求解,所以说不是一般的傻逼;

4.和使用非递归的思想实现图的深度遍历一样,本文只是为了数据结构而数据结构,这在算法时间消耗和空间消耗以及比这本就不多的脑细胞消耗上来说是很不划算的,所以说傻逼简直了!

综上,不要盲目数据结构,想好了兼得的方式在动笔!!!

【屌丝代码】

<pre name="code" class="cpp">#include<iostream>
#include<stack>
#include<vector>
#include<queue>

using namespace std;

typedef struct BiTNode
{
	int data;
	BiTNode *lc;
	BiTNode *rc;

}BiTNode;

BiTNode* createTree(BiTNode*head,int lay,queue<int> q)
{
	if(lay == 0)
	{
		head = NULL;
		return NULL;
	}
	head = new BiTNode;
	head->data = 1;
	if(q.size() == 0)
	{
		head->lc = createTree(head->lc,lay-1,q);
		q.push(head->data);
		head->rc = createTree(head->rc,lay-1,q);
	}
	else
	{
		q.pop();
		head->lc = createTree(head->lc,lay-1,q);
		head->rc = NULL;
	}
	return head;
};
int widthTree(BiTNode*head,int lay)
{
	queue<BiTNode*> q;
	int pos,size,width(0),count;
	q.push(head);
	BiTNode* tmp;
	while(!q.empty())
	{
		size = q.size();
		pos = 0;
		count = 0;
		while(pos<size)
		{
			tmp = q.front();
			q.pop();
			count++;
			if(tmp->lc!=NULL)
			{
				q.push(tmp->lc);
			}
			if(tmp->rc!=NULL)
			{
				q.push(tmp->rc);
			}
			pos++;
		}
		if(count>width)
		{
			width = count;
		}
	}
	return width;
};

int main()
{
	int time,lay_num,width;
	BiTNode* head = NULL;
	cin>>time; // 输入测宽次数
	while(time--)
	{
		cin>>lay_num; // 输入二叉树层数
		queue<int> q;
//		cout<<q.size()<<endl;
		head = createTree(head,lay_num,q); // 建树
		width = widthTree(head,lay_num); // 计算二叉树,树宽。
		cout<<width<<endl;
	}
	return 0;
}

【小结】

1.建立二叉树时,对未安排数据额的节点,赋空值是很有必要的;

2.对二叉树求取树宽时,遇到建树不标准的时候,判断节点是否存在,不仅仅是指针为空的判断很重要,树的结点数据也可以作为节点存在的判据。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 22:18:18

C++ LOL OJ 计算火车停站方案的相关文章

*分支-12. 计算火车运行时间

1 /* 2 * Main.c 3 * B12-分支-12. 计算火车运行时间 4 * Created on: 2014年6月4日 5 * Author: Boomkeeper 6 * 7 ********测试未通过******* 8 */ 9 #include <stdio.h> 10 #include <stdlib.h> 11 12 int startTime,arrTime; 13 int *p_startTime=&startTime; 14 int *p_arr

分支-12. 计算火车运行时间(15)

#include<iostream>#include<iomanip>using namespace std;int main(){    int s,e;    cin>>s>>e;    cout<<setfill('0');    if(e%100>=s%100)        cout<<setw(2)<<e/100-s/100<<":"<<setw(2)<&

CSDN学院系统停站维护

CSDN学院将于2015年4月26日22:00-05:00(次日凌晨)进行停站升级,现有C币支付改为人民币支付,并允许使用C币抵扣购课金额.同时上线的功能还包含讲师课程套餐及会员卡功能.升级期间会影响大家的正常访问和操作,给您带来的不便敬请谅解. 升级结束后有任何问题请发邮件到[email protected]反馈给管理员,或者直接到学院首页右侧的客服QQ反馈问题. 感谢您对CSDN的支持!

hdu 1022火车进出站问题

Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes

火车出站

火车出站 题目描述 铁路进行列车调度时,常把站台设计成栈式结构的站台,试问:设有编号为1到n的n辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种? 输入 输入包含多组测试数据.每组为一个正整数n(1<=n<=20),表示有n辆列车. 输出 输出可能的出栈序列有多少种. 样例输入 4 3 样例输出 14 5 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 while(cin>

计算火车运行的时间

根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间.比如G198次列车从青岛站出发时间为16:00,到达北京南站的时间为20:40,则整个旅途所用时间为04:40.输入格式仅一行,包含两个4位的正整数start和end,中间以空格分隔,分别表示火车的出发时间和达到时间.在一行中输出整个旅途所用的时间,格式为"hh:mm",其中hh表示2位小时数,mm表示2位分钟数. java显示: public class time { public static void main(Str

大规模IM在线用户的计算和数据存储方案

简单的计算模型 1.如果一秒钟处理1000笔请求(每条都进行存储),那么一天的数据量是:24*60*60*1000=8640万:如果每秒1万笔的话,数据大概是8.64亿 2.行业里一般的统计方法是峰值是日活量的五分之一,日活是总用户的8%.按照,按照峰值1万来进行计算的话,总的用户数是: 1万*5/0.08=62.5万,另外付费用户占总用户一般在5%左右,具体看运营情况. 3.日活跃用户产生峰值的计算:一般的消息类的,大概能到0.5%到1%就不错(一秒钟同时发出,网络游戏可能有点不一样,会高一点

分支-12. 计算火车执行时间(15)

本题要求依据火车的出发时间和达到时间,编敲代码计算整个旅途所用的时间. 输入格式: 输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间.每一个时间的格式为2位小时数(00-23)和2位分钟数(00-59),如果出发和到达在同一天内. 输出格式: 在一行输出该旅途所用的时间,格式为"hh:mm",当中hh为2位小时数.mm为2位分钟数. 输入例子: 1201 1530 输出例子: 03:29 import java.util.Scanner; public

网络建站方案不在是密码?那么网站建设方案内容都有什么?

市场分析 1.相关行业的市场是怎样的,市场有什么样的特点,是否能够在互联网上开展公司业务. 2.市场主要竞争者分析,竞争对手上网情况及其网站策划.功能作用. 3.公司自身条件分析.公司概况.市场优势,可以利用网站提升哪些竞争力,建设网站的能力(费用.技术.人力等). 功能定位 1.为什么要建立网站,是为了树立企业形象,宣传产品,进行电子商务,还是建立行业性网站?是企业的基本需要还是市场开拓的延伸? 2.整合公司资源,确定网站功能.根据公司的需要和计划,确定网站的功能类型: 企业型网站.应用型网站