Submission #347597

# Submission time Handle Problem Language Result Execution time Memory
347597 2021-01-13T09:00:39 Z lebasivillar Poi (IOI09_poi) C++14
100 / 100
398 ms 23916 KB
#include <vector>
#include <cassert>
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

#define MAX_N 2000
#define MAX_T 2000

vector<int> solved[MAX_N];
int points[MAX_T];
int score[MAX_N];

bool poiLess(int x, int y)
{
    if (score[x] > score[y])
        return true;
    else if (score[x] == score[y])
    {
        if (solved[x].size() > solved[y].size())
            return true;
        else if (solved[x].size() == solved[y].size())
            return x < y;
        else
            return false;
    }
    else
        return false;
}

int main()
{
    int n, t, p;
    scanf("%d %d %d", &n, &t, &p);
    assert(1 <= n && n <= MAX_N);
    assert(1 <= t && t <= MAX_T);
    assert(1 <= p && p <= n);
    p--;
    memset(points, 0, sizeof(points));
    for (int i = 0; i < n; i++)
    {
        solved[i].reserve(n);
        int x;
        for (int j = 0; j < t; j++)
        {
            scanf("%d", &x);
            if (x == 1)
                solved[i].push_back(j);
            else
                points[j]++;
        }
    }
    vector<int> sortedIds;
    sortedIds.reserve(n);
    for (int i = 0; i < n; i++)
    {
        score[i] = 0;
        for (unsigned int j = 0; j < solved[i].size(); j++)
            score[i] += points[solved[i][j]];
        sortedIds.push_back(i);
    }
    sort(sortedIds.begin(), sortedIds.end(), poiLess);

    for (int i = 0; i < n; i++)
        if (sortedIds[i] == p)
        {
            cout << score[p] << " " << (i + 1) << endl;
            return 0;
        }
    assert(false);

    return 0;
}

Compilation message

poi.cpp: In function 'int main()':
poi.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |     scanf("%d %d %d", &n, &t, &p);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
poi.cpp:49:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   49 |             scanf("%d", &x);
      |             ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 2 ms 492 KB Output is correct
10 Correct 4 ms 620 KB Output is correct
11 Correct 12 ms 1004 KB Output is correct
12 Correct 21 ms 1772 KB Output is correct
13 Correct 61 ms 3436 KB Output is correct
14 Correct 87 ms 6124 KB Output is correct
15 Correct 152 ms 9040 KB Output is correct
16 Correct 164 ms 10220 KB Output is correct
17 Correct 240 ms 13932 KB Output is correct
18 Correct 270 ms 17132 KB Output is correct
19 Correct 366 ms 22764 KB Output is correct
20 Correct 398 ms 23916 KB Output is correct