#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define pb push_back
int matr[2000][2000];
int main(){
//freopen("lemonade.in", "r", stdin);
//freopen("lemonade.out", "w", stdout);
int n,t,p;
cin >> n >> t >> p;
for(int i=0; i<n; i++){
for(int j=0; j<t; j++){
cin >> matr[i][j];
}
}
int problemcntsolved[2000];
for(int i=0; i<t; i++){
int cnt=0;
for(int j=0; j<n; j++){
if(matr[j][i]==1) cnt++;
}
problemcntsolved[i]=cnt;
}
vector<tuple<int, int, int>> v;
//first=score
//second=solved problems
//third=id
for(int i=0; i<n; i++){
int sc=0;
int cnt=0;
for(int j=0; j<t; j++){
if(matr[i][j]==1){
sc+=n-problemcntsolved[j];
cnt++;
}
}
v.pb(make_tuple(sc, cnt, i));
}
sort(v.rbegin(), v.rend());
int score;
int rank;
for(int i=0; i<n; i++){
if(get<2>(v[i])==p-1){
score=get<0>(v[i]);
int cntsled=-1;
int cntpred=-1;
int idx=i;
int idx2=i;
while(get<0>(v[idx])==get<0>(v[i]) && get<1>(v[idx])==get<1>(v[i])){
cntsled++;
idx++;
if(idx==n) break;
}
while(get<0>(v[idx2])==get<0>(v[i]) && get<1>(v[idx2])==get<1>(v[i])){
cntpred++;
idx2--;
if(idx2==-1) break;
}
rank=i-cntpred+cntsled+1;
break;
}
}
//1 solved 0 unsolved
cout << score << " " << rank;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |