您的位置:首页 > 其它

*Byte 采蘑菇

2016-02-19 15:34 169 查看
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 <stdio.h>
int main()
{
int n,i,j,x[104],a[104];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d%d",&x[i],&a[i]);
for(i=0;i<n-1;i++)//按照坐标排序
for(j=0;j<n-1-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;i<n;i++)
{
if(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;i<n;i++)
if(x[i]<0&&x[i+1]>0)
{
t=i;
break;
}
if(c<b)
for(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: