답안 #915329

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
915329 2024-01-23T17:13:33 Z vjudge1 Tenis (COCI20_tenis) C++17
50 / 110
1000 ms 4636 KB
#include "bits/stdc++.h"
using namespace std;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    long long n;
    cin>>n;
    vector< vector<long long> > Lista(3, vector<long long>(n));
    for(long long i = 0; i < 3; i++) for(long long j = 0; j < n; j++) cin>>Lista[i][j];
    vector<long long> Partidos(3, 0);
    vector<long long> Victorias(n, 0);
    vector< vector<long long> > Posiciones(n, vector<long long>(3));
    for(long long i = 0; i < 3; i++) for(long long j = 0; j < n; j++) Posiciones[Lista[i][j] - 1][i] = j + 1;
    /*for(auto E: Posiciones){
        for(auto e: E) cout<<e<<" ";
        cout<<"\n";
    }*/
    for(long long i = 0; i < n - 1; i++){
        for(long long j = i + 1; j < n; j++){
            long long Ganador_1, Ganador_2, Ganador_3, Perdedor_1, Perdedor_2, Perdedor_3;
            if(Posiciones[i][0] < Posiciones[j][0]){
                Ganador_1 = i;
                Perdedor_1 = j;
            } else {
                Ganador_1 = j;
                Perdedor_1 = i;
            }
            if(Posiciones[i][1] < Posiciones[j][1]){
                Ganador_2 = i;
                Perdedor_2 = j;
            } else {
                Ganador_2 = j;
                Perdedor_2 = i;
            }
            if(Posiciones[i][2] < Posiciones[j][2]){
                Ganador_3 = i;
                Perdedor_3 = j;
            } else {
                Ganador_3 = j;
                Perdedor_3 = i;
            }
            //cout<<Ganador_1<<" "<<Ganador_2<<" "<<Ganador_3<<" "<<Perdedor_1<<" "<<Perdedor_2<<" "<<Perdedor_3<<"\n";
            /*if(Ganador_1 == Ganador_2 and Ganador_2 == Ganador_3){
                Victorias[Ganador_2]++;
                long long Posici_n_1, Posici_n_2, Posici_n_3;
                Posici_n_1 = Posiciones[Ganador_2][0];
                Posici_n_2 = Posiciones[Ganador_2][1];
                Posici_n_3 = Posiciones[Ganador_2][2];
                if(Posici_n_1 < Posici_n_2 and Posici_n_1 < Posici_n_3) Partidos[0]++;
                else if(Posici_n_2 < Posici_n_1 and Posici_n_2 < Posici_n_3) Partidos[1]++;
                else if(Posici_n_3 < Posici_n_2 and Posici_n_3 < Posici_n_1) Partidos[2]++;
                else {
                    long long Menor = min(Posici_n_1, min(Posici_n_2, Posici_n_3));
                    long long Mejor = 2222222222222222;
                    long long Actual = -1;
                    if(Menor == Posici_n_1){
                        if(Posiciones[Perdedor_1][0] < Mejor){
                            Mejor = Posiciones[Perdedor_1][0];
                            Actual = 0;
                        }
                    }
                    if(Menor == Posici_n_2){
                        if(Posiciones[Perdedor_2][1] < Mejor){
                            Mejor = Posiciones[Perdedor_2][1];
                            Actual = 1;
                        }
                    }
                    if(Menor == Posici_n_3){
                        if(Posiciones[Perdedor_3][2] < Mejor){
                            Mejor = Posiciones[Perdedor_3][2];
                            Actual = 2;
                        }
                    }
                    Partidos[Actual]++;
                }
            } else {*/
                long long Mejor_1 = min(Posiciones[i][0], min(Posiciones[i][1], Posiciones[i][2]));
                long long Mejor_2 = min(Posiciones[j][0], min(Posiciones[j][1], Posiciones[j][2]));
                if(Mejor_1 == Mejor_2){
                    long long Mejor = 2222222222222222;
                    long long Actual = -0;
                    for(long long k = 0; k < 3; k++){
                        switch(k){
                            case 0:
                            if(Posiciones[Perdedor_1][k] < Mejor and Posiciones[Ganador_1][k] == Mejor_2){
                                Mejor = Posiciones[Perdedor_1][k];
                                Actual = k;
                            }
                            break;
                            case 1:
                            if(Posiciones[Perdedor_2][k] < Mejor and Posiciones[Ganador_2][k] == Mejor_2){
                                Mejor = Posiciones[Perdedor_2][k];
                                Actual = k;
                            }
                            break;
                            case 2:
                            if(Posiciones[Perdedor_3][k] < Mejor and Posiciones[Ganador_3][k] == Mejor_2){
                                Mejor = Posiciones[Perdedor_3][k];
                                Actual = k;
                            }
                            break;
                        }
                        //cout<<Mejor<<" "<<Actual<<"\n";
                    }
                    Partidos[Actual]++;
                    if(Posiciones[i][Actual] < Posiciones[j][Actual]) Victorias[i]++;
                    else Victorias[j]++;
                } else if(Mejor_1 < Mejor_2){
                    long long Mejor = 2222222222222222;
                    long long Actual = -0;
                    for(long long k = 0; k < 3; k++){
                        switch(k){
                            case 0:
                            if(Posiciones[Perdedor_1][k] < Mejor and Posiciones[Ganador_1][k] == Mejor_1 and Ganador_1 == i){
                                Mejor = Posiciones[Perdedor_1][k];
                                Actual = k;
                            }
                            break;
                            case 1:
                            if(Posiciones[Perdedor_2][k] < Mejor and Posiciones[Ganador_2][k] == Mejor_1 and Ganador_2 == i){
                                Mejor = Posiciones[Perdedor_2][k];
                                Actual = k;
                            }
                            break;
                            case 2:
                            if(Posiciones[Perdedor_3][k] < Mejor and Posiciones[Ganador_3][k] == Mejor_1 and Ganador_3 == i){
                                Mejor = Posiciones[Perdedor_3][k];
                                Actual = k;
                            }
                            break;
                        }
                        //cout<<Mejor<<" "<<Actual<<"\n";
                    }
                    Partidos[Actual]++;
                    if(Posiciones[i][Actual] < Posiciones[j][Actual]) Victorias[i]++;
                    else Victorias[j]++;
                } else if(Mejor_2 < Mejor_1){
                    long long Mejor = 2222222222222222;
                    long long Actual = -0;
                    for(long long k = 0; k < 3; k++){
                        switch(k){
                            case 0:
                            if(Posiciones[Perdedor_1][k] < Mejor and Posiciones[Ganador_1][k] == Mejor_2 and Ganador_1 == j){
                                Mejor = Posiciones[Perdedor_1][k];
                                Actual = k;
                            }
                            break;
                            case 1:
                            if(Posiciones[Perdedor_2][k] < Mejor and Posiciones[Ganador_2][k] == Mejor_2 and Ganador_2 == j){
                                Mejor = Posiciones[Perdedor_2][k];
                                Actual = k;
                            }
                            break;
                            case 2:
                            if(Posiciones[Perdedor_3][k] < Mejor and Posiciones[Ganador_3][k] == Mejor_2 and Ganador_3 == j){
                                Mejor = Posiciones[Perdedor_3][k];
                                Actual = k;
                            }
                            break;
                        }
                        //cout<<Mejor<<" "<<Actual<<"\n";
                    }
                    Partidos[Actual]++;
                    if(Posiciones[i][Actual] < Posiciones[j][Actual]) Victorias[i]++;
                    else Victorias[j]++;
                }
            //}
        }
    }
    for(auto E: Partidos) cout<<E<<" ";
    cout<<"\n";
    for(auto E: Victorias) cout<<E<<" ";
    cout<<"\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 456 KB Output is correct
4 Correct 97 ms 600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 456 KB Output is correct
4 Correct 97 ms 600 KB Output is correct
5 Execution timed out 1010 ms 4636 KB Time limit exceeded
6 Halted 0 ms 0 KB -