尝试用结构体函数做,但是第一个测试点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;
}