Code: Select all
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int compare (const void * a, const void * b);
int main(){
int i,j,k;
int N;
cin>>N; //test cases
cin.get();
//cerr<<"cases "<<N<<endl;
int times[200][10]; //contestants, problem ::TIME END
int tried[200][10]; //contestants, problem ::TRIED nr
bool solved[200][10]; //contestants, problem ::Solved
int stats[200][3]; //nr solved, penalty
bool submit[200];
double scores[200][2];
int nr;
for(nr=1; nr <= N; nr++) {
cerr<<"new case "<<nr<<endl;
//init
for( i=0; i!= 200; i++){
stats[i][0]=0; // 0 solved
submit[i]=false;
for( j=0; j!=10; j++){
tried[i][j]=0;
solved[i][j]=false;
}
}
int num, prob, time;
char state;
cin.get();
//cerr<<nr<<" "<<prob<<" "<<time<<" "<<state<<endl;
//cerr<<ss<<endl;
while( cin.peek() != '\n' && cin.peek() !=EOF ){
cin>>num>>prob>>time>>state;
//cin>>nr>>prob>>time>>state;
cerr<<num<<" "<<prob<<" "<<time<<" "<<state<<endl;
submit[num]=true;
if( state == 'I' && !solved[nr][ prob] ){ <<<<<<<<<< nr is mistaken for num
tried[ num][ prob]++;
}
else if( state == 'C' && !solved[nr][ prob] ){ <<<<<<<< same here
solved[num][ prob] = true;
times[num][ prob] = time;
}
cin.get();
//cerr<<cin.peek()<<" "<<(int)'\n'<<endl;
// cerr<< s <<" : "<<s.length()<<endl;
}
//evaluate score
for(i=0; i!=200; i++){ //contestants
int Nprob=0;
int penal=0;
for( j=0; j!= 11; j++){
if( solved[i][j] ){
Nprob++;
penal+=times[i][j];
penal+=20*tried[i][j];
}
}
stats[i][0]=Nprob;
stats[i][1]=penal;
stats[i][2]=i;
//scores[i][0]=i;
//scores[i][1]=(i)*1.e0+(1.e9-penal)*1.e4+Nprob*1.e10;
}
qsort(stats, 200, 3*sizeof(int), compare);
//sort( scores, 0, 200);
for(i=0; i!=200; i++){
//cerr<< i <<" "<<stats[i][0]<<" "<<stats[i][1]<<endl;
int conNr=stats[i][2] ;
if( submit[ conNr ] ){
cout<<stats[ i ][2]<<" "<<stats[ i ][0]<<" "<<stats[ i ][1]<<endl;
}
}
//cerr<<N<<" "<<nr<<endl;
if( nr != N ) cout<<endl;
}
cerr<<endl;
cerr<< "time: "<<clock()/(double)CLK_TCK<<" s"<<endl;
return 0;
}
int compare(const void * a, const void * b){
int *A= (int*)a;
int *B= (int*)b;
if( A[0] < B[0] ) return 1;
if( A[0] > B[0] ) return -1;
if( A[1] > B[1] ) return 2;
if( A[1] < B[1] ) return -2;
if( A[2] > B[2] ) return 3;
if( A[2] < B[2] ) return -3;
cerr<<"Error in sompare"<<endl;
return 0;
//return ( *(int*)a - *(int*)b );
}