求问S组T1
2025-11-01 22:16:09
发布于:浙江
哪位大佬可以帮我看一下我S组T1是不是对的
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
    int w[5],maxn,cd;
}a[100005];
struct bl
{
    int cz1,cz2,vmaxn,vcd,v,id,nid;
    bool vis=false; 
}b[100005];
bool cmpbl(bl x,bl y)
{
    if(x.cz1==y.cz1)return x.vmaxn>y.vmaxn;
    return x.cz1>y.cz1;
}
bool cmpbltw(bl x,bl y)
{
    int xx=(x.vis?x.cz2:x.cz1),yy=(y.vis?y.cz2:y.cz1);
    if(xx==yy)return x.v>y.v;
    return xx>yy;
}
void solve()
{
    int n;
    cin>>n;
    int li=n/2;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].w[1]>>a[i].w[2]>>a[i].w[3];
        if(a[i].w[1]>=a[i].w[2]&&a[i].w[1]>=a[i].w[3])a[i].maxn=1;
        if(a[i].w[2]>=a[i].w[1]&&a[i].w[2]>=a[i].w[3])a[i].maxn=2;
        if(a[i].w[3]>=a[i].w[2]&&a[i].w[3]>=a[i].w[1])a[i].maxn=3;
        if(a[i].w[1]<=a[i].w[2]&&a[i].w[1]>=a[i].w[3]||a[i].w[1]>=a[i].w[2]&&a[i].w[1]<=a[i].w[3])a[i].cd=1;
        if(a[i].w[2]<=a[i].w[1]&&a[i].w[2]>=a[i].w[3]||a[i].w[2]>=a[i].w[1]&&a[i].w[2]<=a[i].w[3])a[i].cd=2;
        if(a[i].w[3]<=a[i].w[2]&&a[i].w[3]>=a[i].w[1]||a[i].w[3]>=a[i].w[2]&&a[i].w[3]<=a[i].w[1])a[i].cd=3;
    }
    for(int i=1;i<=n;i++)
    {
        b[i].vmaxn=a[i].w[a[i].maxn];
        b[i].id=i;
        b[i].nid=a[i].maxn;
        b[i].v=b[i].vmaxn;
        b[i].vcd=a[i].w[a[i].cd];
        b[i].cz1=b[i].vmaxn-b[i].vcd;
        b[i].cz2=b[i].vcd-a[i].w[6-a[i].maxn-a[i].cd];
    }
    sort(b+1,b+1+n,cmpbl);
    int c1=0,c2=0,c3=0;
    for(int i=1;i<=n;i++)
    {
        int cur=b[i].nid;
        if(cur==1)c1++;
        if(cur==2)c2++;
        if(cur==3)c3++;
        if(cur==1&&c1>li)b[i].vis=true,b[i].v=b[i].vcd,b[i].nid=a[b[i].id].cd;
        if(cur==2&&c2>li)b[i].vis=true,b[i].v=b[i].vcd,b[i].nid=a[b[i].id].cd;
        if(cur==3&&c3>li)b[i].vis=true,b[i].v=b[i].vcd,b[i].nid=a[b[i].id].cd;
    }
    sort(b+1,b+1+n,cmpbltw);
    c1=c2=c3=0;
    for(int i=1;i<=n;i++)
    {
        int cur=b[i].nid;
        if(cur==1)c1++;
        if(cur==2)c2++;
        if(cur==3)c3++;
        if(cur==1&&c1>li)b[i].v=a[b[i].id].w[6-a[b[i].id].maxn-a[b[i].id].cd];
        if(cur==2&&c2>li)b[i].v=a[b[i].id].w[6-a[b[i].id].maxn-a[b[i].id].cd];
        if(cur==3&&c3>li)b[i].v=a[b[i].id].w[6-a[b[i].id].maxn-a[b[i].id].cd];
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        ans+=b[i].v;
    }
    cout<<ans<<endl;
}
signed main() 
{
    int t;
    cin>>t;
    while(t--)solve();
    return 0;
}
这里空空如也








有帮助,赞一个