Description
轩神与奇牛是师徒,也是K友,经常打2K,可奇牛老是不故意放水让轩神输,于是轩神决定给奇 牛传授点人生经验以作补偿。 轩神拿出其珍藏多年的人生经验打造了n个经验球并连成一串,每一 个球里都含着一定量的人生经验。好玩的是,你打破一个球,你没法获得里面的人生经验,而只 能获得打破的那个球两边球的经验绝对值差。 假设轩神造了5个球,按顺序为 1 2 3 4 5 那么打破 第一个得到:|0-(2+3+4+5)|=14; 打破第二个:|1-(3+4+5)|=11 以此类推。
Input
输入第一个行是一个整数T,表示轩神向奇牛传授了T回人生经验。 接下来是T组数据,每组数据 开头是一个n(0< n<=10000),表示轩神此次打造的经验球的个数 然后接下来是n个绝对值不大于 1000000整数(按顺序连成一串),表示轩神的人生经验。 要知道,毕竟人无完人,轩神的经验也 有糟粕,所以存在负数。
Output
结果输出T行,对应T组数据。(T<=100) 奇牛为了不辜负轩神对其的厚爱,每次都要争取得到 最多的人生经验,那么,问题来了! 奇牛能得到的最大人生经验到底有多少?请聪明的师弟师妹 帮帮奇牛算出来并输出。
Sample Input
2
5
1 2 3 4
5
5-1 12 -41 111 -65
Sample Output
14
81
建立2个数组,一个储存原数据,另一个储存累和;
重点在于输入的同时去累和处理。不然,先输入完然后再去处理,数据太多会超时。
代码如下:
#include
#include
using namespace std;
int a[20000];
int sum[20000];
int main(){
int t;cin>>t;
while(t--)
{
int n;cin>>n;
for(int i=1;i<=n;i++) { //预处理!!
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
int max=0,z,left,right;
for(int i=1;i<=n;i++)
{
left=sum[i]-a[i];
right=sum[n]-sum[i];
if(abs(left-right)>=max) max=z;
}
cout<
<
博客已搬:洪学林博客