题意: 解法: 由于每次都是翻倍,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; }