2021GDCPC广东省大学生程序设计竞赛 D.Double(思维,暴力)
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021GDCPC广东省大学生程序设计竞赛 D.Double(思维,暴力)相关的知识,希望对你有一定的参考价值。
题意:
解法:
由于每次都是翻倍,2^30>1e9,因此一个人翻倍30次就肯定无敌了.
因此暴力吃左右的点,如果能吃到>=1e9,或者全部吃完,说明能成为冠军.
复杂度O(n*30)
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=5e5+5;
vector<int>ans;
int a[maxm];
int n;
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
int now=a[i];
int l=i-1,r=i+1;
while(now<1e9){
if(l>=1&&a[l]<=now){
l--;now*=2;
}else if(r<=n&&a[r]<=now){
r++;now*=2;
}else{
break;
}
}
if((l==0&&r==n+1)||now>=1e9){
ans.push_back(i);
}
}
cout<<ans.size()<<endl;
for(auto i:ans){
cout<<i<<' ';
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}
以上是关于2021GDCPC广东省大学生程序设计竞赛 D.Double(思维,暴力)的主要内容,如果未能解决你的问题,请参考以下文章
2021GDCPC广东省大学生程序设计竞赛 A An Easy Problem 堆优化
2021GDCPC广东省大学生程序设计竞赛 A.An Easy Problem(二分)