Submission #923541

# Submission time Handle Problem Language Result Execution time Memory
923541 2024-02-07T12:00:13 Z Zygno Poi (IOI09_poi) C++17
100 / 100
504 ms 24580 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(){
    
    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 1 ms 504 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 1 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 1 ms 344 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 2 ms 448 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
11 Correct 15 ms 1116 KB Output is correct
12 Correct 25 ms 1896 KB Output is correct
13 Correct 72 ms 4276 KB Output is correct
14 Correct 103 ms 6024 KB Output is correct
15 Correct 186 ms 13036 KB Output is correct
16 Correct 208 ms 14116 KB Output is correct
17 Correct 290 ms 17236 KB Output is correct
18 Correct 339 ms 19796 KB Output is correct
19 Correct 445 ms 23452 KB Output is correct
20 Correct 504 ms 24580 KB Output is correct