文章

2

粉丝

0

获赞

3

访问

154

头像
P1924 层次遍历 答疑提问:
P1924 复旦大学2023年机试题
发布于2025年12月27日 11:04
阅读数 109

为什么WA?只有80分,递归建树后BFS

#include<bits/stdc++.h>
#define ll long long

#define endl "\n"
#define mod 998244353
const int N = 1e6+5;
using namespace std;
int n;
int a[N];
int p[N];
int h[N][2];
map<int,int> mp,nmp;
int fun(int l,int r,int ql,int qr)//中序 先序
{
	//cout<<"*"<<l<<" "<<r<<" "<<ql<<" "<<qr<<endl;
	if(l==r)
	{
		return a[ql];
	}
	int root=a[ql];
	
	int cnt0 = 0;
	if((root-1  - l +1)>0)cnt0 = (root-1  - l +1);
	int cnt1 = 0;
	if(r- (root+1) + 1 >0)cnt1 = (r- (root+1) + 1);
	if(cnt0)
	{
		int a= fun(l,root-1,ql+1,ql+cnt0);
		h[root][0] = a;
	}
	if(cnt1)
	{
		int b= fun(root+1,r,qr+1-cnt1,qr);
		h[root][1] = b;
	}
	return root;
}
bool vis[N];
void sol()
{
	/**/
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		h[i][0]=h[i][1]=-1;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		p[i]=a[i];
	}
	int idx=0;
	//离散化
	
	sort(p+1,p+n+1);
	for(int i=1;i<=n;i...
登录查看完整内容


登录后发布评论

4 条评论
admin
2025年12月27日 18:53

感谢反馈,check之后发现有一组数据确实存在重复tree[i],应该是23年当时提供题目数据的同学疏忽了~实力比较强就没重复验crying

赞(0)

windflew : 回复 admin: 4 2 4 1 3这个测试点好像也有问题,中序是1 2 3 4, 2为根,(1)2(34),(34)中4为根,画出来的树先序遍历不是2 4 1 3

2025年12月28日 17:38

admin : 回复 windflew: 是的,这个序列不合法,已更新,感谢反馈~

2025年12月29日 02:46
回复给:
windflew
2025年12月27日 11:53

测试数据有问题,没有保证tree[i]各不相同

赞(0)
回复给: