题目链接:

点击打开链接

题目大意:

给出一些苹果树,他们有位置和苹果数,初始方向自定,问折返跑的情况下最多采到多少苹果

题目分析:

直接用两个vector,一个直接存坐标为正的,一个村坐标为负的相反数,然后从小到大排序,取相对较少的集合的长度,然后较多的那个多取一个,如果两个集合大小相等,那么直接取总数即可

代码如下:

stl大法好!!!!

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define MAX 107

using namespace std;

typedef pair<int,int> pii;

vector<pii> a,b;

int n,x,v;

int main ( )
{
    scanf ( "%d" ,&n );
    while ( n-- )
    {
        scanf ( "%d%d" , &x , &v );
        if ( x > 0 ) a.push_back ( make_pair ( x , v ) );
        else b.push_back ( make_pair ( -x , v ));
    }
    sort ( a.begin() , a.end());
    sort ( b.begin() , b.end());
    int len = min ( a.size() , b.size());
    int ans = 0;
    for ( int i = 0 ; i < len ; i++ )
        ans += a[i].second + b[i].second;
    if ( a.size() > len )
        ans += a[len].second;
    else if ( b.size() > len )
        ans += b[len].second;
    printf ( "%d\n" , ans );
}