专项训练 提高组杂题
分类讨论。为了使和最大化,需要序列中的每个元素都为最大的元素。
若
若
若
若选择
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,a[maxn],T,ans;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n==1){
cout<<a[1]<<'\n';
continue;
}
else if(n==2){
cout<<max(2*abs(a[1]-a[2]),a[1]+a[2])<<'\n';
continue;
}
else if(n==3){
cout<<max({3*abs(a[1]-a[2]),3*abs(a[3]-a[2]),3*a[1],3*a[3],a[1]+a[2]+a[3]})<<'\n';
continue;
}
else{
sort(a+1,a+1+n);
cout<<a[n]*n<<'\n';
continue;
}
}
}
你说得对但是我最开始真的觉得很像贪心被硬控40min+
记
手模一下发现
求前缀和数组中的极值,相减即可。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
int T,n,a[maxn];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++) a[i]=a[i-1]+a[i];
int mn=0,mx=0;
for(int i=1;i<=n;i++) mn=min(mn,a[i]),mx=max(mx,a[i]);
cout<<mx-mn<<'\n';
}
}
“当蓝色的夜坠落在世界时,没人看见我们手牵着手。”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律