답안 #351178

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
351178 2021-01-19T14:10:04 Z Kirishina Poi (IOI09_poi) C++14
100 / 100
704 ms 23984 KB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct DatosConcursante {
    int id;
    int puntos;
    int problemasResueltos;
};

bool comparacion(const DatosConcursante& a, const DatosConcursante& b)
{
	if (a.puntos == b.puntos){
		if (a.problemasResueltos == b.problemasResueltos){
			return a.id < b.id;
		}else{return a.problemasResueltos > b.problemasResueltos;}
	}else {return a.puntos > b.puntos;}
}

int find_index(int p,vector<DatosConcursante>& V)
{
    auto it = std::find_if(V.begin(), V.end(), [p](const DatosConcursante& a) { return a.id == p;});
    if (it == V.end()) return -1;
    else return it - V.begin();
}

int ranking(int p, vector<DatosConcursante>& V) {
	sort(V.begin(),V.end(),comparacion);
	return find_index(p,V)+1;
}

int main() {
	int N,T,P; // N: Nº concursantes ,  T: Nº tareas,   P: ID Philip
	vector <int> puntosTareas; 			// Valor em puntos de cada tarea i    0=<i<=T-1
	cin >> N >> T >> P;

	vector <DatosConcursante> dc(N);
	int mCT[N][T];					// Matriz concursantes x Tareas

	puntosTareas.assign(T,N);		// Inicialmente cada tarea tendrá el total de puntos N
									// iremos restando para cada concursante que la haya realizado
	int tareaRealizada;

	// Calculamos/guardamos problemas resueltos por cada concursante. Calculamos los puntos de cada tarea
	for(int concursante=0; concursante<N;++concursante){
		for(int tarea=0; tarea<T;++tarea){
			cin>>tareaRealizada;
			mCT[concursante][tarea]=tareaRealizada;
			puntosTareas[tarea]-=tareaRealizada;
			dc[concursante].problemasResueltos+=tareaRealizada;
		}
	}
	// Calculamos los puntos de cada concursante y guardamos. Guardamos su posición
	for(int concursante=0; concursante<N;++concursante){
		dc[concursante].id=concursante+1;
		for(int tarea=0; tarea<T;++tarea){
			dc[concursante].puntos += mCT[concursante][tarea]*puntosTareas[tarea];
		}
	}
	// Mostramos puntos Philip y ranking ranking
	cout<<dc[P-1].puntos << " " << ranking(P,dc) << '\n' ;
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 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 2 ms 364 KB Output is correct
9 Correct 4 ms 364 KB Output is correct
10 Correct 6 ms 492 KB Output is correct
11 Correct 22 ms 1004 KB Output is correct
12 Correct 36 ms 1516 KB Output is correct
13 Correct 116 ms 3840 KB Output is correct
14 Correct 148 ms 5356 KB Output is correct
15 Correct 272 ms 9196 KB Output is correct
16 Correct 290 ms 10092 KB Output is correct
17 Correct 449 ms 14456 KB Output is correct
18 Correct 477 ms 16372 KB Output is correct
19 Correct 636 ms 21612 KB Output is correct
20 Correct 704 ms 23984 KB Output is correct