题目1550:分糖果

来源:互联网 发布:台州信息网源码 编辑:程序博客网 时间:2024/05/16 11:28
题目1550:分糖果

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:624

解决:126

题目描述:

给从左至右排好队的小朋友们分糖果,
要求:
1.每个小朋友都有一个得分,任意两个相邻的小朋友,得分较高的所得的糖果必须大于得分较低的,相等则不作要求。
2.每个小朋友至少获得一个糖果。
求,至少需要的糖果数。

输入:

输入包含多组测试数据,每组测试数据由一个整数n(1<=n<=100000)开头,接下去一行包含n个整数,代表每个小朋友的分数Si(1<=Si<=10000)。

输出:

对于每组测试数据,输出一个整数,代表至少需要的糖果数。

样例输入:
31 10 136 2 321 1
样例输出:
452
来源:
2014年王道论坛研究生机试练习赛(二)
好几天了,终于自己的思路一次AC了。分开计算的思想,数量最少。
#include<stdio.h>#include<stdlib.h>#include<math.h>int a[100005],ta[100005],s,b[100005],n;void input(){    int i,j;    for(i=0;i<n;i++)    {        scanf("%d",&b[i]);        ta[i]=a[i]=1;    }    s=0;}void fen(){    int i,j;    for(i=1;i<n;i++)    {        if(b[i]>b[i-1])        {            a[i]=a[i-1]+1;        }    }    for(i=n-1;i>0;i--)    {        if(b[i]<b[i-1])            ta[i-1]=ta[i]+1;    }}void suan(){    int i;    for(i=0;i<n;i++)        s+=(a[i]>ta[i])?a[i]:ta[i];}int main(){    int i,j;    while(scanf("%d",&n)!=EOF)    {        input();        fen();        suan();        printf("%d\n",s);    }    return 0;} /**************************************************************    Problem: 1550    User: smileyk    Language: C++    Result: Accepted    Time:70 ms    Memory:2192 kb****************************************************************/


0 0
原创粉丝点击