D. Three Activities

发布时间 2023-12-20 19:06:08作者: 纯粹的

原题链接

穷举,属于模拟题,不要害怕

注意,判断三天互不相同时要判断三次:a!=b,b!=c,c!=a

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct unit
{
    ll v;
    ll d;
};
ll a[100005]={0};
ll b[100005]={0};
ll c[100005]={0};
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        unit ax[3],bx[3],cx[3];
        for(int i=0;i<3;i++)ax[i].v=bx[i].v=cx[i].v=0;
        for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                int j;
                for(j=0;j<3;j++)if(a[i]>ax[j].v)break;
                if(j<3)
                {
                    for(int l=2;l>j;l--)
                    {
                        ax[l].v=ax[l-1].v;
                        ax[l].d=ax[l-1].d;
                    }
                    ax[j].v=a[i];
                    ax[j].d=i;
                }
            }
        for(int i=1;i<=n;i++)
            {
                scanf("%d",&b[i]);
                int j;
                for(j=0;j<3;j++)if(b[i]>bx[j].v)break;
                if(j<3)
                {
                    for(int l=2;l>j;l--)
                    {
                        bx[l].v=bx[l-1].v;
                        bx[l].d=bx[l-1].d;
                    }
                    bx[j].v=b[i];
                    bx[j].d=i;
                }
            }
        for(int i=1;i<=n;i++)
            {
                scanf("%d",&c[i]);
                int j;
                for(j=0;j<3;j++)if(c[i]>cx[j].v)break;
                if(j<3)
                {
                    for(int l=2;l>j;l--)
                    {
                        cx[l].v=cx[l-1].v;
                        cx[l].d=cx[l-1].d;
                    }
                    cx[j].v=c[i];
                    cx[j].d=i;
                }
            }
            ll ans=0;
            for(int i=0;i<3;i++)
                for(int j=0;j<3;j++)
                    for(int k=0;k<3;k++)
            {
                if(ax[i].d!=bx[j].d&&bx[j].d!=cx[k].d&&ax[i].d!=cx[k].d)
                {
                    ans=max(ans,ax[i].v+bx[j].v+cx[k].v);
                }
            }
            printf("%d\n",ans);
    }
    return 0;
}