CF1554A Cherry 题解
作者:互联网
是一道有显然的贪心策略的题,建议难度评为普及-。
简化题意,即为求 \(\max(a_l,a_{l+1},\cdots,a_r)\times\min(a_l,a_{l+1},\cdots,a_r)\)。
不妨从特殊的 \(a_i\) 考虑。如果 \(a_i\) 就是最大值,那么 \(a_{i+1}\geqslant\min(a_l,a_{l+1},\cdots,a_r)\),则删去其余所有元素对结果不会有更劣的影响,\(a_{i+1}\) 为最大值时同理。
如果最小值在 \(a_i\) 或 \(a_{i+1}\) 处取得,最大值在 \(a_{i+2}\) 取得,那么我们在考虑 \(a_{i+1}\) 与 \(a_{i+2}\) 这个情况的时候不会对答案有更劣影响。
所以逐步比较 \(\max(a_i\times a_{i+1})\times\min(a_i\times a_{i+1})\) 即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define ri register int
#define il inline
const int INF=0x7fffffff,N=1e5+10;
int T,n,ans;
int a[N];
il ll read(){
ll x=0,y=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')
y=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*y;
}
signed main(){
T=read();
while(T--){
n=read();
ans=-INF;
for(ri i=1;i<=n;i++){
a[i]=read();
ans=max(ans,a[i]*a[i-1]);
}
printf("%lld\n",ans);
}
return 0;
}
标签:CF1554A,min,int,题解,ll,long,times,Cherry,define 来源: https://www.cnblogs.com/BFcnblogs/p/15086421.html