Submission #351261

# Submission time Handle Problem Language Result Execution time Memory
351261 2021-01-19T17:53:05 Z Kirishina Poi (IOI09_poi) C++14
100 / 100
651 ms 16492 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 buscarPorID(int p, vector<DatosConcursante>& V) {
	long unsigned int i=0;
	bool encontrado=false;
	while(!encontrado && (i<V.size())){
		if (V[i].id==p) encontrado=true;
		else i++;
	}
	return i;
}
int ranking(int p, vector<DatosConcursante>& V) {
	sort(V.begin(),V.end(),comparacion);
	return buscarPorID(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;
}
# Verdict Execution time Memory 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 2 ms 364 KB Output is correct
8 Correct 2 ms 364 KB Output is correct
9 Correct 3 ms 364 KB Output is correct
10 Correct 6 ms 492 KB Output is correct
11 Correct 20 ms 1004 KB Output is correct
12 Correct 33 ms 1516 KB Output is correct
13 Correct 98 ms 3052 KB Output is correct
14 Correct 142 ms 4076 KB Output is correct
15 Correct 249 ms 6636 KB Output is correct
16 Correct 265 ms 7148 KB Output is correct
17 Correct 399 ms 10348 KB Output is correct
18 Correct 446 ms 11500 KB Output is correct
19 Correct 597 ms 14956 KB Output is correct
20 Correct 651 ms 16492 KB Output is correct