IOI 2009 Bulgaria過去問 POI
解法
ソートしよう!!!!!!!
ソース
/* TASK: POI (IOI 2009 Bulgaria) LANG: C++ NAME: JAPLJ Problem URL: http://www.ioi-jp.org/ioi/2009/problems/day1/POI_jp.pdf */ #include<cstdio> #include<algorithm> using namespace std; struct contestant { int idx, score, solved; }; bool operator < (const contestant& a, const contestant& b) { return a.score != b.score ? a.score > b.score : (a.solved != b.solved ? a.solved > b.solved : a.idx < b.idx); } int solvedCount[2000]; bool solved[2000][2000]; contestant C[2000]; int main() { int N, T, P; scanf("%d%d%d", &N, &T, &P); for(int i=0; i<N; ++i) { for(int j=0; j<T; ++j) { int ok; scanf("%d", &ok); solvedCount[j] += ok; solved[i][j] = ok; C[i].solved += ok; } } for(int i=0; i<N; ++i) { C[i].score = 0; C[i].idx = i+1; for(int j=0; j<T; ++j) if(solved[i][j]) C[i].score += N - solvedCount[j]; } sort(C, C+N); for(int i=0; i<N; ++i) { if(C[i].idx == P) { printf("%d %d\n", C[i].score, i+1); break; } } return 0; }