牛客网--19校招--获得最多的奖金
題目描述
小明在越南旅游,參加了當(dāng)?shù)氐膴蕵坊顒?dòng)。小明運(yùn)氣很好,拿到了大獎(jiǎng), 到了最后的拿獎(jiǎng)金環(huán)節(jié)。小明發(fā)現(xiàn)桌子上放著一列紅包,每個(gè)紅包上寫著獎(jiǎng)金數(shù)額。
現(xiàn)在主持人給要求小明在這一列紅包之間“切”2刀,將這一列紅包“切”成3組,并且第一組的獎(jiǎng)金之和等于最后一組獎(jiǎng)金和(允許任意一組的紅包集合是空)。最終第一組紅包的獎(jiǎng)金之和就是小明能拿到的總獎(jiǎng)金。小明想知道最多能拿到的獎(jiǎng)金是多少,你能幫他算算嗎。
?
舉例解釋:桌子上放了紅包? 1, 2, 3, 4, 7, 10。小明在“4,7”之間、“7,10” 之間各切一刀,將紅包分成3組 [1, 2, 3, 4]? ?[7]? ?[10],其中第一組獎(jiǎng)金之和=第三組獎(jiǎng)金之和=10,所以小明可以拿到10越南盾。
輸入描述:
第一行包含一個(gè)正整數(shù)n,(1<=n<= 200 000),表示有多少個(gè)紅包。第二行包含n個(gè)正整數(shù)d[i],表示每個(gè)紅包包含的獎(jiǎng)金數(shù)額。其中1<= d[i] <= 1000 000 000輸出描述:
小明可以拿到的總獎(jiǎng)金示例1
輸入
復(fù)制
5 1 3 1 1 4輸出
復(fù)制
5說明
[1,3,1] [ ] [1,4] ,其中第一組獎(jiǎng)金和是5,等于第三組獎(jiǎng)金和。所以小明可以拿到5越南盾示例2
輸入
復(fù)制
5 1 3 2 1 4輸出
復(fù)制
4說明
[1,3] [2,1] [4],小明可以拿到4越南盾示例3
輸入
復(fù)制
3 4 1 2輸出
復(fù)制
0說明
[ ] [4, 1, 2] [ ] ,小明沒辦法,為了保證第一組第三組相等,只能都分成空的。所以小明只能拿到0越南盾。設(shè)置兩個(gè)標(biāo)志,Low,High,分別從前向后,從后向前遍歷,如果前面的紅包值和大時(shí),后面的向前移動(dòng)一位,加上之后繼續(xù)比較。如果后面的紅包值和大時(shí),前面的向后移動(dòng)一位,加上之后繼續(xù)比較。
如果前后當(dāng)前值相等,記錄下這個(gè)值,前后同時(shí)向中間動(dòng)一位,觀察是否還存在相等的情況下更大的紅包值
本題有一組數(shù)據(jù)很大,int無法存儲(chǔ),需用long類型或long long類型
#include<stdio.h>
int main()
{
?? ?long long n,Low=0,High,sum1=0,sum2=0,t=0;
?? ?scanf("%lld",&n);
?? ?High=n-1;
?? ?long long a[n],i;
?? ?for(i=0;i<n;i++)
?? ?{
?? ??? ?scanf("%lld",&a[i]);
?? ?}
?? ?sum1=a[Low];
?? ?sum2=a[High];
?? ?while(High>=Low)
?? ?{
?? ??? ?if(sum1>sum2)
?? ??? ?{
?? ??? ??? ?High--;
?? ??? ??? ?sum2+=a[High];
?? ??? ?}
?? ??? ?else if(sum1<sum2)
?? ??? ?{
?? ??? ??? ?Low++;
?? ??? ??? ?sum1+=a[Low];
?? ??? ?}
?? ??? ?else if(sum1==sum2)
?? ??? ?{
?? ??? ??? ?t=sum1;
?? ??? ??? ?Low++;
?? ??? ??? ?High--;
?? ??? ??? ?sum1+=a[Low];
?? ??? ??? ?sum2+=a[High];
?? ??? ?}
?? ?}
?? ?printf("%lld\n",t);
}?
總結(jié)
以上是生活随笔為你收集整理的牛客网--19校招--获得最多的奖金的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse中tomcat的简单配置
- 下一篇: Leetcode--264. 丑数Ⅱ