码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 10194 - Football (aka Soccer)

时间:2014-06-28 08:17:55      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:blog   get   2014   os   name   for   

题目:给你一些球队的比赛记录,对球队的成绩进行排序。

分析:模拟。按照题意模拟即可。

            排序优先级:1.分数高 ,2.胜场多,3.净胜球多,4.进球多,5.比赛场次少,6.队名字典序。

注意:队名大小写不敏感,即大小写认为是相同的。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

char title[104],name[104];

typedef struct node
{
    char  word[32];
    int   point,games,wins,losses,scored,against;
}list;
list dict[32];

int small( char c ) 
{
	if ( c >= 'A' && c <= 'Z' )
		return c-'A'+'a';
	return c;
}


bool cmpstr( char* a,char* b )
{
	int now = 0;
	while ( small(a[now]) == small(b[now]) )
		now ++;
	return small(a[now]) < small(b[now]);
}

bool cmp( list a, list b )
{
	if ( a.point != b.point )
		return a.point > b.point;
	if ( a.wins != b.wins )
		return a.wins > b.wins;
	if ( a.scored-a.against != b.scored-b.against )
		return a.scored-a.against > b.scored-b.against;
	if ( a.scored != b.scored )
		return a.scored > b.scored;
	if ( a.games != b.games )
		return a.games < b.games;
	return cmpstr( a.word, b.word );
}

int find( char* word, int l, int n ) 
{
    for ( int i,j = 0 ; j < n ; ++ j ) {
        for ( i = 0 ; i < l ; ++ i )
        	if ( small(dict[j].word[i]) != small(word[i]) ) 
				break;
        if ( i == l ) return j;
    }return -1;
}

void deal( int T )
{
	int save = 0,s1,s2,t1,t2;
    while ( (name[save] = getchar()) != '#' ) 
		save ++;
	t1 = find( name, save, T );
			
	scanf("%d",&s1);
	getchar();
	scanf("%d",&s2);
	getchar();
			
	save = 0;
    while ( (name[save] = getchar()) != '\n' ) 
		save ++;
	t2 = find( name, save, T );
			
	dict[t1].games ++;
	dict[t1].scored += s1;
	dict[t1].against += s2;
	dict[t2].games ++;
	dict[t2].scored += s2;
	dict[t2].against += s1;
	if ( s1 > s2 ) {
		dict[t1].point += 3;
		dict[t1].wins ++;
		dict[t2].losses ++;
	}
	if ( s1 < s2 ) {
		dict[t2].point += 3;
		dict[t2].wins ++;
		dict[t1].losses ++;
	}
	if ( s1 == s2 ) {
		dict[t1].point ++;
		dict[t2].point ++;
	}
}
		
int main()
{
    int  N,T,G;
    scanf("%d",&N);
    getchar();
	while ( N -- ) {
		memset( dict, 0, sizeof(dict) );
		gets(title);
	    printf("%s\n",title);
	        
		scanf("%d",&T);
		getchar();
	    for ( int i = 0 ; i < T ; ++ i ) 
	        gets(dict[i].word);
	        
	    scanf("%d",&G);
	    getchar();
	    for ( int i = 0 ; i < G ; ++ i ) {
	        deal( T );
		}
	        
		sort( dict, dict+T, cmp );
		for ( int i = 0 ; i < T ; ++ i )
			printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n",				i+1,dict[i].word,dict[i].point,dict[i].games,dict[i].wins,				dict[i].games-dict[i].wins-dict[i].losses,dict[i].losses,				dict[i].scored-dict[i].against,dict[i].scored,dict[i].against);

		if ( N ) printf("\n");
	}
    return 0;
}
 

UVa 10194 - Football (aka Soccer),布布扣,bubuko.com

UVa 10194 - Football (aka Soccer)

标签:blog   get   2014   os   name   for   

原文地址:http://blog.csdn.net/mobius_strip/article/details/35052611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!