Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

大水题1A

Posted by KatrineYang at 2016-09-01 10:03:06 on Problem 1245
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;

struct team{
	int sc[7];
	string name;
	int solved;
	int total;
	int geo;
	void getData(){
		solved = 0; total = 0;
		for(int i = 0; i < 7; i++){
			total += sc[i];
			if(sc[i] != 0) solved++;
		}
		if(solved == 0) geo = 0;
		else{
			double sum = 0.0;
			for(int i = 0; i < 7; i++){
				if(sc[i] != 0) sum += log(sc[i]+0.0);
			}
			sum /= solved;
			geo = (int)(0.5 + exp(sum));
		}
	}
}teams[32];

bool compare(const team &t1, const team &t2){
	if(t1.solved > t2.solved) return true;
	if(t1.solved < t2.solved) return false;
	if(t1.total < t2.total) return true;
	if(t1.total > t2.total) return false;
	if(t1.geo < t2.geo) return true;
	if(t1.geo > t2.geo) return false;
	return t1.name < t2.name;
}

bool operator==(const team &t1, const team &t2){
	return t1.solved == t2.solved && t1.total == t2.total && t1.geo == t2.geo;
}

int N;
int cnt = 0;

int ws(int n){
	if(n < 10) return 1;
	if(n < 100) return 2;
	if(n < 1000) return 3;
	return 4;
}

void print(int wz, int mc){
	if(mc < 10) cout << 0;
	cout << mc << " " << teams[wz].name;
	int len = teams[wz].name.length();
	for(int i = 0; i < 11-len; i++) cout << " ";
	cout << teams[wz].solved;
	int WS = ws(teams[wz].total);
	for(int i = 0; i < 5-WS; i++) cout << " ";
	cout << teams[wz].total;
	WS = ws(teams[wz].geo);
	for(int i = 0; i < 4-WS; i++) cout << " ";
	cout << teams[wz].geo;
	for(int i = 0; i < 7; i++){
		WS = ws(teams[wz].sc[i]);
		for(int j = 0; j < 4-WS; j++) cout << " ";
		cout << teams[wz].sc[i];
	}
	cout << endl;
}

int main() {
	while(cin >> N){
		cnt++;
		if(N == 0) break;
		for(int i = 0; i < N; i++){
			cin >> teams[i].name;
			for(int j = 0; j < 7; j++){
				cin >> teams[i].sc[j];
			}
			teams[i].getData();
		}
		sort(teams, teams+N, compare);
		cout << "CONTEST " << cnt << endl;
		int mc = 1;
		for(int i = 0; i < N; i++){
			if(i == 0) mc = 1;
			else if(!(teams[i] == teams[i-1])){
				mc = i+1;
			}
			print(i, mc);
		}
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator