有一种痛叫做别人的代码和我的代码。一看就不是一个级别上的。。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
#define maxn 205
#define inf 0x3f3f3f3f
struct point{
int a,b;
point(){};
};
bool cmp1(point & x,point & y){
return x.a<y.a;
}
bool cmp2(point & x,point & y){
return x.a>y.a;
}
int main()
{
int n;
int a,b,ls,rs,sum;
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n)){
point left[maxn],right[maxn];
left[0].a=0,left[0].b=0;
right[0].a=0,right[0].b=0;
ls=1;
rs=1;
sum=0;
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
if(a<0)left[ls].a=a,left[ls++].b=b;
if(a>0)right[rs].a=a,right[rs++].b=b;
if(a==0)sum+=a;
}
sort(right,right+rs,cmp1);
sort(left,left+ls,cmp2);
for(int i=1;i<ls;i++){
left[i].b+=left[i-1].b;
}
for(int i=1;i<rs;i++){
right[i].b+=right[i-1].b;
}
if(ls==rs){
sum+=right[rs-1].b+left[ls-1].b;
}
else if(ls>rs){
sum+=left[rs].b+right[rs-1].b;
}
else{
sum+=left[ls-1].b+right[ls].b;
}
printf("%d\n",sum);
}
}
//别人的代码简洁明了
#include<iostream>
#include<utility>
#include<algorithm>
using namespace std;
main()
{int n,i,l=0,r=0,ans=0,a,b;
cin>>n;
pair<int,int>p[1000];
for(i=0;i<n;i++){
cin>>a>>b;
p[i]=make_pair(a,b);
if(a<0)
l++;
else
r++;}
sort(p,p+n);
for(i=max(0,l-r-1);i<=min(n,l*2);i++)
ans+=p[i].second;
cout<<ans;
}