专栏文章

题解:P14298 [JOI2023 预选赛 R2] JOI 运动会 / JOI04

P14298题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minikxzx
此快照首次捕获于
2025/12/02 03:00
3 个月前
此快照最后确认于
2025/12/02 03:00
3 个月前
查看原文
相信大家已经读懂题意了。
我们可以将这些数一块从小到大排序。
再枚举一个最大值,然后找到离这个数最近的其他三个班级的成员就行了,而由于我们是遍历过来的,所以可以边遍历边打标记。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+20;
int n;
struct node{
    int val,from;
}z[N];
int tot;
bool cmp(node x,node y){
    return x.val<y.val;
}
signed main(){ 
    cin>>n;
    tot=1;
    for(int i=1;i<=4*n;i++){
        cin>>z[i].val;
        z[i].from=tot;
        if(i%n==0) tot++;
    }
    tot=4;
    int lst_1=0,lst_2=0,lst_3=0,lst_4=0;
    int ans=1e9;
    sort(z+1,z+1+4*n,cmp);
    for(int i=1;i<=4*n;i++){
        if(z[i].from==1) lst_1=i;
        if(z[i].from==2) lst_2=i;
        if(z[i].from==3) lst_3=i;
        if(z[i].from==4) lst_4=i;
        if(lst_1&&lst_2&&lst_3&&lst_4) {
            int minn=min(min(lst_1,lst_2),min(lst_3,lst_4));
            ans=min(ans,z[i].val-z[minn].val);
        }
    }
    cout<<ans;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...