rb2。。。。。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n;
struct node{
	int x,y,v,sign;
	double k;
}a[maxn];
bool cmp(node a,node b){
	if(a.k==b.k&&a.sign==b.sign){
		if(a.x>0) return a.x<b.x;
		return a.x>b.x;
	}
	else if(a.k==b.k)
		return a.sign>b.sign;
	else return a.k>b.k;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].v);
		a[i].k=a[i].x*1.0/a[i].y;
		a[i].sign=(a[i].x>0)?1:-1;
	} 
	sort(a,a+n,cmp);
	ll sum=0;int num=0,i=0;
	while(i<n){
		int tt=0,f=0;
		//不是同一个k 
		if(!(a[i].k==a[i-1].k&&a[i].sign==a[i-1].sign)){
			while(1){
				if(!(a[i].k==a[i-1].k&&a[i].sign==a[i-1].sign)&&f)break;
				tt++;f=1;
				int cur=a[i++].v;
				if(cur>1){
					sum+=cur,num++;
					sum+=(tt-1);
					if(tt-1) num++;
					tt=0;
				}
			} 
		}	
		if(tt){
			sum+=tt;
			num+=1;
		}
	}
	printf("%lld %d",sum,num);
}

猜你喜欢

转载自blog.csdn.net/weixin_50904510/article/details/120731945