noip第21课作业
1. 遍历二叉树
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其中序序列和后序序列,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:两行,第一行为中序序列,第二行为后序序列。
【样例输入】
abd###ce##f##
【样例输出】
dbaecf
dbefca
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//中序序列
void MidTree(int bt){
if(bt){
MidTree(data[bt].left);
cout << data[bt].value;
MidTree(data[bt].right);
}
}
//后序序列
void LastTree(int bt){
if(bt){
LastTree(data[bt].left);
LastTree(data[bt].right);
cout << data[bt].value;
}
}
int main()
{
root = ;
cnt = ;
root = buildTree();
MidTree(root);
cout << endl;
LastTree(root);
return ;
}
2. 计算二叉树的结点个数
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其总结点的个数,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:仅一行,为该二叉树的结点个数。
【样例输入】
abd###ce##f##
【样例输出】
6
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算结点数
int Node(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ) return ;
else return Node(data[bt].left)+Node(data[bt].right) + ;
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Node(root) << endl;
return ;
}
3. 计算二叉树的叶子结点个数
【问题描述】
以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:
输出其叶子结点的个数,其中总结点个数不超过100。
输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;
输出:仅一行,为该二叉树的叶子结点的个数。
【样例输入】
abd###ce##f##
【样例输出】
3
#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算叶子数
int Leaf(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ){
return ;
}
else return Leaf(data[bt].left)+Leaf(data[bt].right);
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Leaf(root) << endl;
return ;
}
4. 解密犯罪团伙
【问题描述】
快过年了,犯罪分子们也开始为年终奖“奋斗”了,小明的家乡出现了多次抢劫事件。由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过呢,经过很多天的努力,警察叔叔还是搜集到了一些线索,需要聪明的我们编写程序帮助警察叔叔分析一下有多少个独立的犯罪团伙?
输入格式:输入第一行为n,m,n表示强盗的人数,m表示警方搜集到的m条线索。接下来m行每一行有两个数a,b,表示强盗a和强盗b是通过。
数据范围说明:(1≤n≤20000),(1≤m≤1000000),1≤a,b≤n。
【输入样例】
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
【输出样例】
3
#include<iostream>
using namespace std;
int f[] = {},n,m,k,sum = ;
//数组初始化,数组里存的是自己的下标
void init(){
for(int i = ; i <= n; i++){
f[i] = i;
}
}
//查找过程
int getf(int v){
if(f[v] == v){
return v;
}
else{
f[v] = getf(f[v]);
return f[v];
}
}
//合并的过程
void merge(int x, int y){
int t1,t2;
t1 = getf(x);
t2 = getf(y);
if(t1 != t2){
f[t2] = t1;
}
}
int main()
{
int i,x,y;
cin >> n >> m;
init();
for(i = ; i <= m; i++){
cin >> x >> y;
merge(x,y);
}
for(i = ; i <= n; i++){
if(f[i] == i) sum++;
}
cout << sum << endl;
return ;
}
1. 小球下落
【问题描述】
许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都是false,当访问到一个节点时,如果这个节点时false,则这个球把它变成true,然后从左子树走,继续他的旅程。如果节点时true,则球也会改变它为false,而接下来从右子树走。满二叉树的标记方法如下图:
因为所有的节点最初为false,所以第一个球将会访问节点1,节点2和节点4,转变节点的布尔值后在节点8停止。第二个球将会访问节点1,3,6,在节点12停止。明显地,第三个球在它停止之前,会访问节点1,2,5,在节点10停止。现在你的任务是,给定FBT的深度D,和I,表示第I个小球下落,你可以假定I不超过给定的FBT的叶子树,写一个程序求小球停止时的叶子序号。
输入:仅一行,包含两个用空格隔开的整数D和I(2≤D≤20,I≤I≤524288)。
输出:对应输出第1个小球下落停止时的叶子序号。
【样例输入】4 2
【样例输出】12
#include<iostream>
using namespace std;
bool tree[*];
int main()
{
int d,k,i,j,p;
cin >> d >> k;
for(i = ; i <= k; i++){ //枚举每一个球的下落情况
p = ;
for(j = ; j < d; j++){
if(tree[p] == false){ //结点的值为0
tree[p] = true;
p *= ; //向左走
}
else{ //结点的值为 1
tree[p] = false;
p = p*+; //向右走
}
}
}
cout << p << endl;
return ;
}
noip第21课作业的更多相关文章
- noip第34课作业
1. 信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...
- noip第27课作业
1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...
- noip第5课作业
1. 计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...
- noip第4课作业
1. 计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...
- noip第9课作业
1. 打印乘法表 [问题描述] 用for循环实现输出1至9的乘法表 [样例输出] 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4 ...
- noip第21课资料
- noip第33课作业
1. 排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...
- noip第29课作业
1. 钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...
- noip第28课作业
分段数列 [问题描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入格式: 输入第1行包含两个正整 ...
随机推荐
- 9.17-9.19h5日记
9.17 ❤关于position(absolute.relative) position:relative: top:100px: right:200px: 如果relative设置值,则是根据它原来 ...
- java基础之—类加载器
要了解类加载器先要了解类的加载 一.类的加载(类的加载概述) 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.加载 就是指将clas ...
- SoftwareEngineering.APIDesign.iOS
API Design for iOS/Mac (Objective-c Edition) 1. UI Control Library API的设计 和已有组件保持一致(例如: 使用标准的API, 模型 ...
- MacDev.GetArchOfLibrary
1. static library How to check target architecture of a static library http://changhoward.blogspot.c ...
- 论坛:Error:No result defined for action cn.itcast.oa.view.action.TopicAction and result
使用了<s:hidden name="forumId" value="#forum.id"/> 可以改为: <s:hidden name=&q ...
- Https如何确保传输安全的
1.对称加密算法 加密和解密算法是公开的,那个密钥是保密的, 只有双方才知道, 这样生成的加密消息(密文) 别人就无法得知了. 2.非对称加密算法 RSA算法非常有意思,是有一对儿钥匙, 一个是保密的 ...
- js中的find(),filter(),has()的用法和区别
filter():操作当前元素集,删除不匹配的元素,得到一个新的集合 <ul> <li class="a">list item 1</li> & ...
- DB2有五种约束
DB2有五种约束: NOT NULL 约束是这样一种规则,它防止在表的一列或多列中输入空值. 唯一约束(也称为唯一键约束)是这样一种规则,它禁止表的一列或多列中出现重复值.唯一键和主键是受支持的唯一约 ...
- 回文日期(NOIP2016)
题目:回文日期 这题虽然说不难,但是也不能算水了. 我先讲讲思路.60分的算法很好写,就是判断一下是不是回文串,分离每个数位,判断即可. 但我们的目标是满分,所以我来讲讲满分算法. 首先,给的是区间, ...
- LD_LIBRARY_PATH
LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径. 在linux下可以用export命令来设置这个值,比如 在linux ...