이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <algorithm>
#include <utility>
#define f first
#define s second
using namespace std;
bool comp (pair <int, int> a, pair <int, int> b)
{
    return a.f > b.f;
}
int main()
{
    int n;
    scanf("%d", &n);
    pair <int, int> x[n], y[n], z[n];
    int orix[n], oriy[n], oriz[n];
    bool eliminated[n];
    for (int i=0; i<n; i++)
    {
        scanf("%d %d %d", &orix[i], &oriy[i], &oriz[i]);
        x[i].f=orix[i];
        y[i].f=oriy[i];
        z[i].f=oriz[i];
        x[i].s=i;
        y[i].s=i;
        z[i].s=i;
        eliminated[i]=false;
    }
    sort(x, x+n, comp);
    sort(y, y+n, comp);
    sort(z, z+n, comp);
    int posx=0, posy=0, posz=0, ans=-1;
    while (posx < n && posy < n && posz < n)
    {
        if (x[posx].s==y[posy].s && x[posx].s==z[posz].s)
        {
            eliminated[x[posx].s]=true;
            posx++;
            posy++;
            posz++;
        }
        if (x[posx].s==y[posy].s)
        {
            eliminated[x[posx].s]=true;
            posx++;
            posy++;
        }
        else if (x[posx].s==z[posz].s)
        {
            eliminated[x[posx].s]=true;
            posx++;
            posz++;
        }
        else if (z[posz].s==y[posy].s)
        {
            eliminated[y[posy].s]=true;
        }
        else if (!eliminated[x[posx].s] && !eliminated[y[posy].s] && !eliminated[z[posz].s])
        {
            if (oriy[x[posx].s] >= y[posy].f || oriz[x[posx].s] >= z[posz].f)
                posx++;
            else if (orix[y[posy].s] >= x[posx].f || oriz[y[posy].s] >= z[posz].f)
                posy++;
            else if (oriy[z[posz].s] >= y[posy].f || orix[z[posz].s] >= x[posx].f)
                posz++;
            else
            {
                ans=x[posx].f + y[posy].f + z[posz].f;
                break;
            }
        }
        while (posx < n && eliminated[x[posx].s])
            posx++;
        while (posy < n && eliminated[y[posy].s])
            posy++;
        while (posz < n && eliminated[z[posz].s])
            posz++;
    }
    printf("%d\n", ans);
}
컴파일 시 표준 에러 (stderr) 메시지
team.cpp: In function 'int main()':
team.cpp:17:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
team.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         scanf("%d %d %d", &orix[i], &oriy[i], &oriz[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |