思路:我们进行枚举即可,对于每一层如果符合答案,那么我们就更新。
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],c[N],pre[N]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int d=0,sum=0; int k=0; for(int i=1;i<=n;i++) { int tmp=0; for(int j=i;j<=i+(1<<k)-1;j++) tmp+=a[j]; //因为记录最小层,所以我们不取等。 if(tmp>sum) { sum=tmp; d=k+1; } i+=(1<<k)-1; k++; } cout<<d<<endl; return 0; }
P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值--2024蓝桥杯冲刺省一
最新推荐文章于 2024-05-23 21:27:51 发布