1 条题解

  • 0
    @ 2025-10-26 11:30:29
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    
    struct point{
    	int x,y;
    	bool operator < (const point &p)const{
    		return y<p.y;
    	}
    };	
    
    vector<point>p1,p2,p3;
    multiset<int>s1,s2;
    
    bool check1(int mid){
    	multiset<int>s=s1;
    	for(point &t:p1){
    		int a=(t.y-mid)/t.x;
    		auto k=s.upper_bound(a);
    		if(k==s.begin())return 0;
    		k--;
    		s.erase(k);
    	}
    	return 1;
    }
    
    bool check2(int mid){
    	multiset<int>s=s2;
    	for(point &t:p2){
    		int a=(t.y-mid)/t.x;
    		auto k=s.lower_bound(a);
    		if(k==s.end())return 0;
    		s.erase(k);
    	}
    	return 1;
    }
    
    
    void clear(){
    	p1.clear(),p2.clear(),p3.clear();
    	s1.clear(),s2.clear();
    }
    
    signed main(){
    	int T;
    	scanf("%lld",&T);
    	while(T--){
    		clear();
    		int n,x1;
    		scanf("%lld%lld",&n,&x1);
    		for(int i=1;i<=n;i++){
    			int y1,x2,y2;
    			scanf("%lld%lld%lld",&y1,&y2,&x2);
    			p1.push_back({x2,y1});
    			p2.push_back({x2,y2});
    			p3.push_back({x1,y1});
    			p3.push_back({x1,y2}); 
    		}
    		for(int i=1;i<=4*n;i++){
    			int a;
    			scanf("%lld",&a);
    			if(a>0)s1.insert(a);
    			else s2.insert(a);
    		}
    		if(s1.size()<n||s2.size()<n){
    			printf("-1\n");
    			continue;
    		}
    		sort(p3.begin(),p3.end());
    		int cnt=n;
    		for(point t:p3){
    			if(cnt<s2.size())p2.push_back(t),cnt++;
    			else p1.push_back(t);
    		}
    		for(point i:p1)printf("(%d,%d)\n",i.x,i.y);
    		int r=p3.back().y,l=-1e18,mx,mi;
    		
    		while(l<=r){
    			int m=l+r>>1;
    			if(check1(m)){
    				mi=m;
    				l=m+1;
    			}
    			else r=m-1;
    		}
    		r=1e18,l=p3[0].y;
    		while(l<=r){
    			int m=l+r>>1;
    			if(check2(m)){
    				mx=m;
    				r=m-1;
    			}
    			else l=m+1;
    		}
    		//printf("%lld %lld\n",mx,mi);
    		printf("%lld\n",mx-mi);
    	} 
    }
    
    • 1

    信息

    ID
    7654
    时间
    2500ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    40
    已通过
    5
    上传者