#include <fstream> 
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> //sort
#include <numeric> //accumulate
using namespace std; 
typedef struct student_table_struct {
	string name;
	vector<int> score;
	unsigned int total;
	double avg;
} student_type;
void readdata(vector<student_type>& ztable); //파일로부터 데이터를 읽어온다
bool zcompare(const student_type ele1, const student_type ele2); //sort시 비교 조건
void printdata(vector<student_type>& ztable); //출력
void operation(vector<student_type>& ztable); //총합과 평균
int main() 
{ 
		vector<student_type> ztable;
	
		//자료를 읽는다.
		readdata(ztable);
		
		//총점과 평균
		operation(ztable);
		//평균으로 정렬
		sort(ztable.begin(),ztable.end(),zcompare);
		
		//출력
		printdata(ztable);
        return 0; 
} 
//파일로부터 데이터를 읽어온다
void readdata(vector<student_type>& ztable){
	
	ifstream fin("data.txt");
	student_type tmp;
	int tmp2,i;
	while(1)
	{
		fin >> tmp.name;
		for(i=1;i<=4;i++)
		{
			fin >> tmp2;
			tmp.score.push_back(tmp2);
		}
		
		if(fin.eof()) break;
		ztable.push_back(tmp);
	}
	
}
//sort시 비교 조건
bool zcompare(const student_type ele1, const student_type ele2)
{	
	return ele1.avg > ele2.avg;
}
//출력하기
void printdata(vector<student_type>& ztable)
{
		int cnt=0;
		cout << "이름\t국어\t영어\t수학\t과학\t총점\t평균" << endl;
		for(vector<student_type>::iterator i=ztable.begin();i<ztable.end();++i)
		{
			
			cout << i->name << "\t" <<
					i->score[cnt*4+0] << "\t" << 
					i->score[cnt*4+1] << "\t" <<
					i->score[cnt*4+2] << "\t" <<
					i->score[cnt*4+3] << "\t" << 
					i->total << "\t" <<
					i->avg <<endl;
			cnt++;
			
		}
}
void operation(vector<student_type>& ztable)
{
		for(vector<student_type>::iterator i=ztable.begin() ;i<ztable.end();++i)
		{
			i->total = accumulate(i->score.begin()+i->score.size()-4,i->score.end(),0);
			i->avg = i->total/4.0;
		}
}