Submission #1244290

#TimeUsernameProblemLanguageResultExecution timeMemory
1244290ereringTeam Contest (JOI22_team)C++20
100 / 100
81 ms17016 KiB
#include <bits/stdc++.h>
#define pb push_back
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5,inf=2e8,MOD=1e9+9;
struct info{
    int x,y,z,id;
    friend bool operator<(info a,info b){
        return a.x<b.x;
    }
};
bool vis[N];
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n; cin>>n;
    vector<info> x,y,z;
    for(int i=0;i<n;i++){
        int a,b,c; cin>>a>>b>>c;
        x.pb({a,b,c,i});
        y.pb({b,a,c,i});
        z.pb({c,a,b,i});
    }
    sort(x.begin(),x.end());
    sort(y.begin(),y.end());
    sort(z.begin(),z.end());
    int l1=n-1,l2=n-1,l3=n-1;
    while(l1>=0 || l2>=0 || l3>=0){
        //cout<<x[l1].id<<' '<<y[l2].id<<' '<<z[l3].id<<endl;
        while(l1>=0 && vis[x[l1].id])l1--;
        while(l2>=0 && vis[y[l2].id])l2--;
        while(l3>=0 && vis[z[l3].id])l3--;
        if(l1<0 || l2<0 || l3<0)break;
        if(x[l1].id==y[l2].id || x[l1].id==z[l3].id){
            vis[x[l1].id]=1;
            if(x[l1].id==y[l2].id){
                vis[y[l2].id]=1;
                l2--;
            }
            if(x[l1].id==z[l3].id){
                vis[z[l3].id]=1;
                l3--;
            }
            l1--;
            continue;
        }
        if(y[l2].id==z[l3].id){
            vis[y[l2].id]=1; vis[z[l3].id]=1;
            l2--;
            l3--;
            continue;
        }

        int mx=x[l1].x,my=y[l2].x,mz=z[l3].x;
        bool flag=1;
        if(x[l1].y==my || x[l1].z==mz){
            vis[x[l1].id]=1;
            l1--;
            flag=0;
        }
        while(l1>=0 && vis[x[l1].id])l1--;
        if(l1<0 || l2<0 || l3<0)break;
        if(y[l2].y==mx || y[l2].z==mz){
            vis[y[l2].id]=1;
            l2--;
            flag=0;
        }
        while(l2>=0 && vis[y[l2].id])l2--;
        if(z[l3].y==mx || z[l3].z==my){
            vis[z[l3].id]=1;
            l3--;
            flag=0;
        }
        while(l3>=0 && vis[z[l3].id])l3--;
        if(!flag)continue;
        cout<<mx+my+mz;
        return 0;
    }
    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...