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;
}