1 条题解

  • 1
    @ 2026-4-21 21:14:18
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define rmk memset
    #define Fastin cin.tie(0)->sync_with_stdio(0)
    const int N=3e5+5;
    int n,dpl[N],dpr[N];
    struct node{
    	int c,x,id1,id2;
    	//friend bool operator<(node a,node b){
    	//	return a.x<b.x;
    	//}
    }seats[N];
    bool cmp(node a,node b){return a.x<b.x;}
    bool cmpx(node a,node b){return a.id1<b.id1;}
    signed main(){
    	Fastin;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>seats[i].c>>seats[i].x;
    		seats[i].id1=i;
    	}
    	sort(seats+1,seats+n+1,cmp);
    	for(int i=1;i<=n;i++)seats[i].id2=i;
    	rmk(dpl,0x3f,sizeof dpl);
    	for(int i=2;i<=n;i++){
    		if(seats[i].c!=seats[i-1].c)
    			dpl[i]=min(dpl[i],seats[i].x-seats[i-1].x);
    		else
    			dpl[i]=min(dpl[i],dpl[i-1]+seats[i].x-seats[i-1].x);
    	}
    	rmk(dpr,0x3f,sizeof dpr);
    	for(int i=n-1;i>=1;i--){
    		if(seats[i].c!=seats[i+1].c)
    			dpr[i]=min(dpr[i],seats[i+1].x-seats[i].x);
    		else
    			dpr[i]=min(dpr[i],dpr[i+1]+seats[i+1].x-seats[i].x);
    	}
    	sort(seats+1,seats+n+1,cmpx);
    	for(int i=1;i<=n;i++){
    		int j=seats[i].id2;
    		cout<<min(dpl[j],dpr[j])<<'\n';
    	}
    	return 0;
    }
    
    

[蓝桥杯 2023 国 B] 子 2023 / 双子数

信息

ID
13949
时间
1000ms
内存
256MiB
难度
3
标签
递交数
108
已通过
17
上传者