• CF1038D Slime


    题意:
    有n只史莱姆,每只史莱姆有一个分数,每次一只史莱姆可以吞掉左边的或者右边的史莱姆(要是有的话),然后ta的分数会减去被吞的史莱姆的分数,问最后剩下的史莱姆分数最大为多少

    思路:
    三种情况:
    如果全是正数 就将最小的数取负 其他全取正
    如果全是负数 就将最大的数取正 其他全取负
    如果有正有负 就取他们的绝对值之和

    #include<bits/stdc++.h>
    using namespace std; 
     
    typedef long long ll;
    const int maxn = 5e5+5;
    int a[maxn];
    ll sum = 0;
    
    int main()
    {
    	
    	int n;
    	cin>>n;
    	for(int i = 0; i < n; i++)
    	{
    		cin>>a[i];
    		sum += abs(a[i]);
    	}
    	sort(a,a+n);
    	if(n == 1)
    	{
    		cout<<a[0]<<endl;
    	}
    	else
    	{
    		if(a[0] > 0)
    		{
    			cout<<sum-2*a[0]<<endl;
    		}
    		else if(a[n-1] < 0)
    		{
    			cout<<sum+2*a[n-1]<<endl;
    		}
    		else cout<<sum<<endl;
    	}
    	return 0;
    }
    
    
    
  • 相关阅读:
    linux常用命令笔记
    head first html与css
    多线程编程核心技术日记
    nio
    排序算法
    随笔
    数据库读写分离
    购物网站设计
    http
    servlet初始化
  • 原文地址:https://www.cnblogs.com/tianming1/p/13603593.html
Copyright © 2020-2023  润新知