求教
查看原帖
求教
643244
DI_520楼主2024/10/10 21:40

尝试用结构体函数做,但是第一个测试点WA了,不知道是什么原因。 自己也测试过,部分测试数据输出与预期不符(可能全洛谷都没有人会闲得去为橙题测试代码)。附上一组测试结果:



输入:

4

3 5 4 8 2 9 0 6 11 7 78 66 55 22 46 5


输出(预期):

6


输出(实际):

4



#include<iostream>
#include<cmath>
using namespace std;
int a[201],n,num;
struct da
{
	int strength;
	int id;
};
da dfs(int deep,int l,int r)
{
	if(deep==n)
	{
		if(a[l]>a[r])
		{
			return {a[l],l};
		}
		else
		{
			return {a[r],r};
		}
	}
	da r1=dfs(deep+1,l,(l+r)>>1),r2=dfs(deep+1,(l+r)>>1+1,r);
	if(r1.strength>r2.strength)
	{
		if(deep==1)
		{
			return {r1.strength,r2.id};
		}
		else
		{
			return {r1.strength,r1.id};
		}
	}
	else
	{
		if(deep==1)
		{
			return {r2.strength,r1.id};
		}
		else
		{
			return {r2.strength,r2.id};
		}
	}
}
int main()
{
	cin>>n;
	num=pow(2,n);
	for(int i=1;i<=num;i++)
	{
		cin>>a[i];
	}
	if(n<=1)
	{
		if(a[1]>a[2]) cout<<2;
		else cout<<1;
		return 0;
	}
	cout<<dfs(1,1,num).id;
	return 0;
}
2024/10/10 21:40
加载中...