*Byte 采蘑菇

1003: Byte采蘑菇
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Submitted: 704 Accepted: 149
[Submit][Status][Web Board]
Description

元旦回家,Byte在亲戚家里吃到了一种很好吃的蘑菇,据说是长在河堤边柳树上的,第二天Byte决定亲自去采蘑菇,做一个蘑菇干锅作为午餐。柳树整齐的长在笔直的河堤边,每棵柳树上都长有若干蘑菇。假设Byte的起始坐标为x=0,Byte的左边坐标值为负数,右边坐标值为正数。开始的时候Byte可以选择向左走或者向右走,但是一旦Byte遇到一棵没有被采摘过的树,Byte会先把所有蘑菇摘下来,然后转换一个方向继续前进。即如果开始向左走,在坐标x=-1处遇到一棵没有被采摘过的树,Byte会先摘下所有蘑菇,然后向右走。问Byte最多可以摘到多少蘑菇。

Input

多组测试数据。

第一行输入一个整数n(1<=n<=100)代表河边总共有多少棵树(保证x=0处不会有树)。
后面n行每行有两个整数xi, ai ( - 100000 ≤ xi ≤ 100000, xi ≠ 0, 1 ≤ ai ≤ 100000),代表柳树的坐标以及每棵柳树上有多少蘑菇。

Output

输出Byte最多可以摘到多少蘑菇。

Sample Input

3
-2 2
1 4
-1 3
3
1 9
3 5
7 10

Sample Output

9
9

#include 
int main()
{
    int n,i,j,x[104],a[104];
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;iscanf("%d%d",&x[i],&a[i]);
        for(i=0;i1;i++)//按照坐标排序
            for(j=0;j1-i;j++)
        {
            int temp;
            if(x[j]>x[j+1])
            {
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
        int c=0,b=0;
        for(i=0;iif(x[i]<0)
                c++;
            else
                b++;
        }//分别计算原点两边树木棵数
      int s=0;
      if(b==0)
        s=a[n-1];
        if(c==0)
            s=a[0];//只能采一棵
        if(c!=0&&b!=0//哪边树多则最终比另外一边采的多一棵,一样则均被采走
        {
           int t;
            for(i=0;iif(x[i]<0&&x[i+1]>0)
            {
                t=i;
                break;
            }
            if(cfor(i=t-c+1;i<=t+c+1;i++)
                s+=a[i];
            else if(c>b)
                for(i=t-b;i<=t+b;i++)
                s+=a[i];
            else
                for(i=t-c+1;i<=t+c;i++)
                s+=a[i];
        }
       printf("%d\n",s);
    }
    return 0;
}

你可能感兴趣的:(*Byte 采蘑菇)