1 条题解

  • 0
    @ 2026-9-22 1:09:58

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long 
    #define the_end return 0;
    
    const int N=5e5;
    
    struct Node{
    	ll a,b,idx,flag;
    	friend Node operator + (Node x,Node y){
    		return Node{x.a+y.a,x.b+y.b,x.idx,x.flag};
    	}
    };
    
    Node r[N+10],suma,sumb;
    ll n;
    
    bool cmpa(Node x,Node y){
    	return x.a>y.a;
    }
    
    bool cmpidx(Node x,Node y){
    	return x.idx<y.idx;
    }
    
    int main(){
    
        ios::sync_with_stdio(false);
        cin.tie(0),cout.tie(0);
    
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>r[i].a;
    	}
    
    	for(int i=1;i<=n;i++){
    		cin>>r[i].b;
    		r[i].idx=i;
    	}
    
    	sort(r+1,r+1+n,cmpa);
    
    	for(int i=1;i<=n;i++){
    		if(suma.a<sumb.a){
    			suma=suma+r[i];
                r[i].flag=0;
    		}
    		else {
    			sumb=sumb+r[i];
    			r[i].flag=1;
    		}
    	}
    
        if(suma.b>sumb.b){//如果现在的这个集合在第二个人眼中的价格较低,那么就把两个集合交换,让第二个人选择另一个集合
            for(int i=1;i<=n;i++){
                r[i].flag=1-r[i].flag;
            }
        }
    
        sort(r+1,r+1+n,cmpidx);
    
    	for(int i=1;i<=n;i++){
    		cout<<r[i].flag<<" ";
    	}
    	
    	the_end
    }
    
    
    • 1

    [POI 2024/2025 R1] Sprawiedliwy podział

    信息

    ID
    3374
    时间
    6000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者