题解: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   zhangzirui66  阅读(5)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示