Submission #923542

# Submission time Handle Problem Language Result Execution time Memory
923542 2024-02-07T12:04:08 Z Zygno Poi (IOI09_poi) C++17
100 / 100
221 ms 16572 KB
#include <bits/stdc++.h>
using namespace std;

struct contestant {
    int id;
    int score;
    int solvedTasks;
    int finalRank;
    contestant(int _id, int _score, int _solvedTasks, int _finalRank) {
        id = _id;
        score = _score;
        solvedTasks = _solvedTasks;
        finalRank = _finalRank;
    }
    contestant() {
        id = -1;
        score = -1;
        solvedTasks = -1;
        finalRank = -1;
    }
};

vector<vector<int>> scoreInput;
vector<int> taskScore;
vector<contestant> contestantScore;

bool customCompare(contestant a, contestant b) {
    if(a.score > b.score) return true;
    if(a.score < b.score) return false;
    if(a.solvedTasks > b.solvedTasks) return true;
    if(a.solvedTasks < b.solvedTasks) return false;
    return a.id < b.id;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n; // Number of contestants
    int t; // Number of tasks
    int p; // Philip’s ID was P    
    
    cin >> n >> t >> p;

    //Read the task scores
    for(int i = 0; i < n; i++){ // Contestant
        scoreInput.push_back(std::vector<int>()); // Add a new row
        for(int j = 0; j < t; j++){ // Task
            int a;
            cin >> a;
            scoreInput[i].push_back(a); // Add an element to the first row
        }
    }

    //Calculate the task scores
    for(int j = 0; j < t; j++){ // Task
        int points = 0;
        for(int i = 0; i < n; i++){ // Contestant
            if(scoreInput[i][j] == 0) points++;
        }
        taskScore.push_back(points);
    }

    //Calculate the contestant scores
    for(int i = 0; i < n; i++){ // Contestant
        int points = 0;
        int solvedTasks = 0;
        for(int j = 0; j < t; j++){ // Task
            if(scoreInput[i][j] == 1){
                points += taskScore[j];
                solvedTasks++;
            }
        }
        contestant temp = contestant(i+1, points, solvedTasks, -1);
        contestantScore.push_back(temp);
    }
    
    //Sort the contestant scores
    sort(contestantScore.begin(), contestantScore.end(), customCompare);
    for(int i = 0; i < n; i++){
        contestantScore[i].finalRank = i+1;
    }

    //Sort the contestant scores by id
    sort(contestantScore.begin(), contestantScore.end(), [](contestant a, contestant b) {
        return a.id < b.id;
    });

    cout << contestantScore[p-1].score << " " << contestantScore[p-1].finalRank << endl;

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 3 ms 600 KB Output is correct
11 Correct 7 ms 856 KB Output is correct
12 Correct 11 ms 1300 KB Output is correct
13 Correct 32 ms 3164 KB Output is correct
14 Correct 48 ms 4592 KB Output is correct
15 Correct 83 ms 10064 KB Output is correct
16 Correct 91 ms 10820 KB Output is correct
17 Correct 137 ms 12528 KB Output is correct
18 Correct 150 ms 14432 KB Output is correct
19 Correct 201 ms 16572 KB Output is correct
20 Correct 221 ms 16404 KB Output is correct