1 条题解

  • 0
    @ 2025-8-24 23:06:18

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ggpw_XNW
    弱小和无知从来都不是生存的障碍,傲慢才是!

    搬运于2025-08-24 23:06:18,当前版本为作者最后更新于2024-12-28 16:29:08,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    先放代码:

    #include<iostream>
    #include<cmath>
    using namespace std;
    unsigned long long n , a[100005] , T , k;
    int main(){
    	cin >> T;
    	while(T--){
    		cin >> n >> k;
    		unsigned long long maxn = 0;
    		for(int i=1;i<=n;i++){
    			cin >> a[i];
    			maxn = max(maxn,a[i]);
    		}
    		if(k==0){
    			maxn = 0;unsigned long long ans = 0;
    			for(int i=1;i<=n;i++){
    				maxn = max(maxn,a[i]);
    				ans += maxn;
    			}
    			cout << ans << endl;
    		}else{
    			if(n>2||(k%2==1&&a[1]<=a[2])||(k%2==0&&a[1]>=a[2]))cout << maxn * n << endl;
    			else{
    				if(a[1]>a[2]){
    					if(k%2==0)cout << a[1] * 2 << endl;
    					else cout << a[1] + a[2] << endl;
    				}
    				else{
    					if(k%2==0)cout << a[1] + a[2] << endl;
    					else cout << a[1] + a[2] << endl;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    解释:
    对于每朵花,不难发现我们将美丽度最大的花交换到最前面,答案即为最大的。所以我们只需要将最大的花交换到最前面,然后其余操作可以无视。
    注意:
    如果 nn 等于 22,或 kk 等于 00,我们需要特判一下,详见代码。

    • 1

    信息

    ID
    10443
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者