标签:10 CF1554A int 题解 cin cdots 测试用例 Cherry leqslant
又是一道十分经典的贪心
亲爱的题目在这里
题目(已翻译)
给 \(n\) 个整数 \(a_1,a_2,\cdots,a_n\) ,求 \(\max(a_l,a_{l+1},\cdots,a_r)\cdot\min(a_l,a_{l+1},\cdots,a_r)\) 的最大值
输入
第一行包含一个整数 \(t\)(测试用例数)。
每个测试用例的第一行包含一个整数 \(n\)。
每个测试用例的第二行包含 \(n\) 个整数 \(a_1,a_2,\cdots,a_n\)。
输出
对于每个测试用例,输出其最大可能值。
样例输入
4
3
2 4 3
4
3 2 3 1
2
69 69
6
719313 273225 402638 473783 804745 323328
样例输出
12
6
4761
381274500335
数据约定
\(1\leqslant t\leqslant 10^4\),\(2\leqslant n\leqslant 10^5\)。
保证总和 n 在所有测试用例中不超过 \(3 \cdot 10^5\) 。
这道题的总体思路是这样的
我们要找到整个数列最大的数及其相邻两边最大的数,它们的乘积是答案
这时,有同学就要问了:为什么呢?
因为找到了最大的那个,在包含它的区间里,\(max\) 值肯定是它自己
但是在左右的区间里,区间范围再大,\(min\) 的值都只会减少不会增加
所以我们的区间范围取最小,即 \(2\),就可以保证答案最大了
放上拙劣的代码
#include<bits/stdc++.h>//万能头文件
using namespace std;
typedef long long ll;
const int N=1e5+5;
const int INF=0x3f3f3f3f;
int n,a[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);//关闭同步流,加速
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
ll ans=-INF;
for(int i=1;i<n;i++)
ans=max(ans,1ll*a[i]*a[i+1]);
cout<<ans<<"\n";
}
return 0;
}//完结撒花
标签:10,CF1554A,int,题解,cin,cdots,测试用例,Cherry,leqslant 来源: https://www.cnblogs.com/joshuahxz210/p/15083735.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。