本文共 814 字,大约阅读时间需要 2 分钟。
题目链接:
题目大意:
给出一些苹果树,他们有位置和苹果数,初始方向自定,问折返跑的情况下最多采到多少苹果
题目分析:
直接用两个vector,一个直接存坐标为正的,一个村坐标为负的相反数,然后从小到大排序,取相对较少的集合的长度,然后较多的那个多取一个,如果两个集合大小相等,那么直接取总数即可
代码如下:
stl大法好!!!!
#include#include #include #include #include #define MAX 107using namespace std;typedef pair pii;vector 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 );}
转载地址:http://wvvjn.baihongyu.com/