题目:
分析:倒着来一波就求出最大值了。
再倒着来一波就有个数了,存放在数组中。
再倒着把数据输出一波就ac了、
代码:
#include<bits/stdc++.h>
using namespace std;
int m;
int A[100005];
int main()
{
cin>>m;
for(int i=0;i<m;i++) cin>>A[i];
int sum=(A[m-1]+A[m-2]);
double adv=abs(A[m-1]-A[m-2]);
int minn=min(A[m-1],A[m-2]);
for(int i=m-3;i>=0;i--)
{
sum=sum+A[i];
minn=min(minn,A[i]);
adv=max(adv,1.0*(sum-minn)/(m-i-1));
}
double adv2=adv;
vector<int> v;
sum=(A[m-1]+A[m-2]);
adv=abs(A[m-1]-A[m-2]);
minn=min(A[m-1],A[m-2]);
for(int i=m-3;i>=0;i--)
{
sum=sum+A[i];
minn=min(minn,A[i]);
adv=1.0*(sum-minn)/(m-i-1);
if(adv==adv2) v.push_back(i);
}
for(int i=v.size()-1;i>=0;i--)
{
cout<<v[i]<<endl;
}
}
有最后一个测试点是数据全部相等,很容易修改的,懒得搞了。