1. 程式人生 > >西南民族大學第十屆校賽(同步賽)(F題——集訓隊脫單大法:這是一道只能由學姐我自己出資料的水題)

西南民族大學第十屆校賽(同步賽)(F題——集訓隊脫單大法:這是一道只能由學姐我自己出資料的水題)

題目描述
總所不周知!ZZZZone有了女朋友卻誰也不知道。但是ZZZZone在集訓隊總是和陳大佬走的很近,每天摟摟抱抱十分不成體統!於是就被ZZZZone的女朋友給知道了,但是呢,ZZZZone的女朋友是一個熱愛畫畫的溫柔又可愛的女子,於是她決定把ZZZZone大卸兩塊,沒錯是兩塊!!
ZZZZone呢他的長度為 n,並且每個單位長度都有一個相對應的重量,他的小女朋友希望將ZZZZone切成兩部分後,兩個部分中的最大重量之差的絕對值最大(顯然兩個部分均不能為空啊),她呢覺得很惆悵,不知道該怎麼切最好,所以想讓你們來想想辦法。

輸入描述:
第一行為一個n(2 <= n <= 105),表示ZZZZone的長度,第二行為n個數,表示ZZZZone每個單位長度的重量(0 <= a[i] <= 106)。

輸出描述:
輸出切成兩部分後,每部分的重量的最大值之差的絕對值最大是多少。

輸入
4
3 4 1 6

輸出
3

這道題在做的時候應該知道第一個元素的值和最後一個元素的值時關鍵,假設共有n個元素,前x個元素一部分,後n-x個元素為一部分,前x個元素中最大的元素要麼比第一個大,要麼是第一個元素,所以都要取決於第一個元素的值,同理可得最後一個元素也是這個理,那我們只需要:
1.後n-1個元素中最大的減去第一個元素的值記為s;
2.前n-1個元素中最大的減去最後一個元素的值記為s1;
3.比較s和s1這兩個值的大小,輸出最大的即可;

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	long long int n,a[100005],b[100005],i,s,s1;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>a[i];
		b[i]=a[i];
	}
	sort(a+1,a+n);
	sort(b,b+n-1);
	s=a[n-1]-a[0];
	s1=b[n-2]-b[n-1];
	if(s>s1)
		cout<<s<<endl;
	else
		cout<<s1<<endl;
	return 0;
}