开始,苹果树CodeForces558A

   大一升大二的暑假刚开始接触acm,完全不知道是怎么回事,其实一个暑假都没有多清晰的认识。

   现在已经12月,再回顾之前的题目,抽时间整理。这是接触acm见的第一个题,是暑假训练赛1做的一道题。自己写的第一份代码。所有都是为自己写的,方便回顾,因为太渣,所以希望没有人看。

 

   题目大意:一个人在一排树中摘苹果,人的起点位置为0,每棵树对应一个位置(有负有正)和苹果数,人每摘完一棵树上的苹果,方向反转,直到反方向没有苹果。0位置没有苹果树。求最多能摘到多少苹果。

    输入:树的棵数,每一行一棵树的位置和树上的苹果个数。

   输出:苹果个数。

   想法:将位置排序,其对应的苹果个数随其排列,算出有多少负方向的和正方向的,多的方向能摘到的棵数等于少的方向能摘到的棵数,均从0位置开始。

#include<iostream>
using namespace std;
int main()
{    int k,a[200000],b[100000];//2个数组,分别放位置和个数
     cin>>k;
     for(int i=0;i<k;i++)
     {
         cin>>a[i]>>b[i];
     }//输入
     for(int j=0;j<k-1;j++)
     {
         for(int m=0;m<k-1;m++)
         {
             int q,p;
             if(a[m]>a[m+1]){q=a[m];a[m]=a[m+1];a[m+1]=q;p=b[m];b[m]=b[m+1];b[m+1]=p;}
         }
     }//根据位置排序,个数随位置排序
     int e=0;
     for(int n=0;n<k;n++)
     {  
         if(a[n]<0)e++;
     }//计算负方向有多少颗树
     int f;
     f=k-e;//正方向的
     int c;
     if(e<=f)
     {  c=f-e;//取差
        int sum=0;
        for(int x=0;x<k-c+1;x++)
        {   
            sum+=b[x];
        }
        cout<<sum;
     }//右边多,把苹果个数加起来
     else
     {  c=e-f;
        int sum1=0;
        for(int y=c-1;y<k;y++)
        {   sum1+=b[y];
        }
        cout<<sum1;
     }//左边多,把苹果个数加起来
}

 

 

   

 

posted @ 2015-12-05 19:32  哲贤  阅读(203)  评论(0编辑  收藏  举报