Submission #1282307

#TimeUsernameProblemLanguageResultExecution timeMemory
1282307hoangmc2009Team Contest (JOI22_team)C++17
0 / 100
1 ms568 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int n,mark[200009];
struct Bros {
    int x,y,z,id;
} a[200009],b[200009],c[200009];
bool check(Bros X,Bros Y,Bros Z)
{
    if(X.id==Y.id or X.id==Z.id or Y.id==Z.id) return false;
    if(X.x<=max(Y.x,Z.x)) return false;
    if(Y.y<=max(X.y,Z.y)) return false;
    if(Z.z<=max(X.z,Y.z)) return false;
    return true;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin>>n;
    for(int x,y,z,i=1;i<=n;++i)
    {
        cin>>x>>y>>z;
        a[i]=b[i]=c[i]={x,y,z,i};
    }
    sort(a+1,a+n+1,[&](Bros P,Bros Q){return P.x<Q.x;});
    sort(b+1,b+n+1,[&](Bros P,Bros Q){return P.y<Q.y;});
    sort(c+1,c+n+1,[&](Bros P,Bros Q){return P.z<Q.z;});
    for(int i=n,j=n,k=n;min({i,j,k})>0;)
    {
        if(check(a[i],b[j],c[k]))
        {
            cout<<a[i].x+b[j].y+c[k].z;
            return 0;
        }
        if(a[i].x<=max(b[j].x,c[k].x)) mark[b[j].id]=mark[c[k].id]=1;
        if(b[j].y<=max(a[i].y,c[k].y)) mark[a[i].id]=mark[c[k].id]=1;
        if(c[k].z<=max(a[i].z,b[j].z)) mark[a[i].id]=mark[b[j].id]=1;
        while(i>0 and mark[a[i].id]) --i;
        while(j>0 and mark[b[j].id]) --j;
        while(k>0 and mark[c[k].id]) --k;
        //cerr<<i<<" "<<j<<" "<<k<<endl;
    }
    cout<<-1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...