与班尼特·胡迪一起做生意 AC

Time Limit:   1 s      Memory Limit:   256 MB

Description

马爷作为2-80X的资深土财主,靠着敏锐的商业嗅觉不断买卖商品赚的盆满钵满。近日来大家发现了异样。马爷做生意从来只有赚钱,永远不会亏本。

坦诚的马爷公开了这个秘密。马爷早些年通过不可描述的手段弄到了一个可以预测价格的机器。通过它,马爷可以知道某个商品在今后n天的价格。但是作为牺牲,马爷在这n天之内最多只能分别进行一次该商品的买进和卖出

现在大家都知道了这个秘密。但是你真的可以选对时间买进卖出,使得自己的收益最大化吗?

Input

第一行为数字T,代表接下来有T组数据(T<=10)

每组数据第一行为数字N,代表知道N天的价格信息(N<=10^6)

每组数据第二行为N个正整数ai,ai代表第i天的价格(0<ai<10^9,1<=i<=N)。

 

Output

 

每组数据输出占一行,一行仅输出一个数字X,代表最多可以赚X元

(注意:买进一定在卖出之前)

 

Samples

input:
3
5
1 2 3 4 5
5
1 2 3 1 5
5
5 4 3 2 1
output:
4
4
0

Hint

样例一中在第1天买进第5天卖出可以赚4元

样例二中在第1天买进和第4天买进第5天卖出都可以赚4元,

样例三中在每天都在跌,怎么买都是亏钱,所以选择不买不卖

 

Author

Source

杭州师范大学第十一届程序设计竞赛

 

题解:题目很简单,找到买进价格最低和卖出最高之差,没有输出0;

思路:一开始的结构体排序比较的思路,然后超时。。被大佬们说傻。代码比较简单,一边读入,找到前n-1天最便宜的价格,与第n天价格最差,max取差值最大的。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<cstring>
 7 using namespace std;
 8 int main()
 9 {
10     int T,n,money,ans,Min;
11     scanf("%d",&T);
12     while(T--)
13     {
14         ans=0;               //每一次都要清空数据啊,不然会被保留
15         scanf("%d",&n);  
16         scanf("%d",&Min);     //先把第一次输入当作最小值    
17         for(int i=2;i<=n;i++)
18         {
19             scanf("%d",&money);
20             Min=min(Min,money);       //与后进来的数据比较取最小
21             ans=max(money-Min,ans);    //剪一下取较大值
22         }
23         printf("%d\n",ans);
24     }
25     return 0;
26 }