题目链接:
题目大意:
给出一些苹果树,他们有位置和苹果数,初始方向自定,问折返跑的情况下最多采到多少苹果
题目分析:
直接用两个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 );
}