题目大意:给出n个位置,以及每个位置上有的苹果数目,人初始在位置0,拿到苹果之后便反向,问最多能拿到的苹果数目
解题思路:对n个位置排序,取正负方向位置个数的最小值,值小的那个方向的苹果全取完,值大的那个方向的苹果取靠近0位置的前 2方向最小值+1
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
struct P
{
int a,b;
}p[maxn];
bool cmp(P c,P d)
{
return c.a<d.a;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i = 0; i < n; i++)
scanf("%d%d",&p[i].a,&p[i].b);
sort(p,p+n,cmp);
int cnt1 = 0,cnt2 = 0;
for(int i = 0; i < n; i++)
{
if(p[i].a<0) cnt1++;
else cnt2++;
}
int ans = 0;
if(cnt1>cnt2)
{
for(int i = cnt1-1; i >= cnt1-cnt2-1; i--)
ans += p[i].b;
for(int i = cnt1; i < cnt1+cnt2; i++)
ans += p[i].b;
}
else
{
for(int i = 0; i < cnt1; i++)
ans += p[i].b;
for(int i = cnt1; i < cnt1+cnt1+1; i++)
ans += p[i].b;
}
printf("%d\n",ans);
}
return 0;
}