题解:P11309 纷飞的樱花雨
一道小分讨。
坑点在于交换可以不相邻且不能自己交换。
观察到只要 \(k \ge 1\) 就一定能将最大值换到最前面,剩下的随便换就行。但 \(n=2\) 是例外,此时没有剩余可交换的,手动特判 \(k\) 的奇偶性即可。
若 \(k=0\),则直接计算答案。
整合即可得出代码:
#include<bits/stdc++.h>
using namespace std;
long long t, n, k, a[100005];
int main(){
cin >> t;
while(t --){
cin >> n >> k;
for(long long i = 1; i <= n; i ++) cin >> a[i];
if(n == 2){//特判 n = 2
if(k & 1){//奇数相当于换一次
swap(a[2], a[1]);
if(a[1] > a[2]) cout << a[1] * 2 << "\n";
else cout << a[1] + a[2] << "\n";
continue;
}
else{//反之相当于没换
if(a[1] > a[2]) cout << a[1] * 2 << "\n";
else cout << a[1] + a[2] << "\n";
continue;
}
}
if(k != 0){//最大值换到最前面
long long maxn = 0;
for(long long i = 1; i <= n; i ++) maxn = max(maxn, a[i]);
cout << maxn * n << "\n";
}
else{//无法操作,直接计算
long long sum = 0, maxn = 0;
for(long long i = 1; i <= n; i ++) maxn = max(maxn, a[i]), sum += maxn;
cout << sum << "\n";
}
}
return 0;
}
分类:
题解
posted on 2025-01-11 14:18 zhangzirui66 阅读(5) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】