其他分享
首页 > 其他分享> > CF1554A Cherry 题解

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