洛谷日记 Day 7 P1087 FBI树

我在这儿哟(溜~~)

个人见解

狗题!狗题!狗题!真的是坑!(好了,蒟蒻发泄完了。)

这题其实还是二叉树的后序遍历,但是蒟蒻的我拿到题是蒙的,什么FBI,要不要拨打911。唉难受。仔细看了下题,大概意思就是说给一个定长的0、1 1字符串,然后迭代切割一半,直到传长为1。其中全0的构成的树称为B树,全1构成的树称为I树,既有0又有1的树称为 F树。让输出这棵树的后序遍历结果。

我的做法其实也是蛮简单的,就是构造一个带字符型返回值的后序遍历函数,当前是什么类型的树就返回什么值,如B树就返回B,I树、F树同理。在构造到l==r的时候就判断当前是0串还是1串,0串就返回B1串就返回IF树通过在后序遍历中比较左右子树是否相等相等则输出并返回其中任意一个,不相等则直接输出并返回F

AC代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1024 + 10;//最大数据规模
char a[MAXN];
char postorder(int l,int r ) {
	if(r==l) {//左右结点位置相同,直接输出返回该结点的类型
		if(a[l]=='1') {
			cout<<"I";
			return 'I';
		} else if(a[l]=='0'){
			cout<<"B";
			return 'B';
		}
	}
	int k=(r+l)/2;//计算中值
	char c1=postorder(l,k);//遍历左子树并返回左子树的类型F B I
	char c2=postorder(k+1,r);//遍历右子树并返回右子树的类型F B I
	if(c1==c2){//c1与c2相等,直接输出并返回c1的值
		cout<<c1;
		return c1;
	}else{//c1!=c2直接输出并返回c2
		cout<<"F";
		return 'F';
	}
}
int main() {
	int n;
	cin>>n;
	cin>>a+1;
	postorder(1,pow(2,n));//pow(2,n)与2^n同理
	return 0;
}

 

### 关于洛谷 P1923 的 Java 解决方案 对于题目 **不高兴的津津(升级版)**,该问题主要涉及模拟和条件判断逻辑。虽然具体题面未给出,但从相似类型的题目可以推测这可能是一个基于特定规则计算或统计的问题。 #### 题目分析 通常这类题目会提供一系列事件或者行为模式,并要求按照一定规则来决定最终的结果。例如,在一天中的不同时间段内发生的活动及其影响因素等[^1]。 #### 实现思路 为了处理这个问题,建议采用如下方法: - 定义变量存储各个时间点的状态变化情况; - 使用循环遍历每一天的时间段,根据不同条件下调整状态值; - 记录总的不满次数或其他所需统计数据; 下面展示了一个简单的框架用于解决此类问题: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 输入部分 int days = sc.nextInt(); // 假设输入天数 double[][] events = new double[days][]; for (int i = 0; i < days; ++i){ int numEventsToday = sc.nextInt(); events[i] = new double[numEventsToday * 2]; // 存储每件事的发生时间和结束时间 for (int j = 0; j < numEventsToday; ++j){ events[i][j*2] = sc.nextDouble(); // 开始时间 events[i][(j*2)+1] = sc.nextDouble(); // 结束时间 } } // 处理逻辑 int unhappyCount = 0; for (double[] day : events){ boolean isUnhappy = false; // 对每天内的每一个时段进行检查... for (int k = 0; k < day.length / 2 && !isUnhappy ; k+=2){ // 如果在这个小时内发生了让Azusa不开心的事情,则标记为true if ((day[k] >= 8 && day[k+1] <= 9) || (day[k] >= 17 && day[k+1] <= 18)){ isUnhappy = true; } } if(isUnhappy){ unhappyCount++; } } System.out.println(unhappyCount); // 输出总共有多少天让她感到不快乐 } } ``` 这段代码展示了如何读取多组测试数据以及相应的操作流程。当然实际编码时还需要根据具体的题目描述进一步完善细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值