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行包含两个正整 ...
随机推荐
- u-boot之make <board_name>_config执行过程分析
从网上下载uboot源码之后需要对源码作相应修改来支持自己的开发板,更改完源码之后需要配置.uboot(make<board_name>_config).这里以百问网的开发板jz2440为 ...
- Linux命令大全完整版
1. linux系统管理命令 adduser 功能说明:新增用户帐号.语 法:adduser补充说明:在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐 ...
- ssrf绕过总结
前言 昨天忘了在公众号还是微博上看到的了,看到一个SSRF绕过的技巧,使用的是 ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ 绕过的,自己也没遇到过.然后想想自己对SSRF绕过还是停留在之前的了解,也没学习过新的绕过方法, ...
- Ubutun 配置php redis 扩展
1.安装redis 下载:wget --no-check-certificate https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz ...
- wordvec_词的相似度
import gensimfrom gensim.models import word2vecimport loggingimport jiebaimport osimport numpy as np ...
- mybatis 一次执行多条语句
现在的一些互联网应用 为了提高性能,现在一般比较少的使用外键.不是不用,只是在创建数据库不标明外键关系,用程序去维护. 为了维护数据一致性,我们需要手动完成相关数据的删除 比如用户和用户的关注 当用户 ...
- Python : locals and globals
Python有两个内置的函数,locals() 和globals(),它们提供了基于字典的访问局部和全局变量的方式.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个 字典,它的键字 ...
- R语言2版本3版本安装
./configure --prefix=/YZpath/public/software/R/R-3.5.0 --with-readline=no --with-x=no make make inst ...
- web API分类
什么是Web API? Web API是网络应用程序接口.包含了广泛的功能,网络应用通过API接口,可以实现存储服务.消息服务.计算服务等能力,利用这些能力可以进行开发出强大功能的web应用. 分类 ...
- js中实现 复制到剪切板 功能
一:引包 <script type="text/javascript" src="jquery.js"></script> <sc ...