Submission #1162783

#TimeUsernameProblemLanguageResultExecution timeMemory
1162783mpopov1Poi (IOI09_poi)C++20
100 / 100
381 ms16040 KiB
#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 timeMemoryGrader output
Fetching results...