UVa 10194 - Football (aka Soccer)

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

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

排序优先级: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

时间: 2024-08-11 04:51:34

UVa 10194 - Football (aka Soccer)的相关文章

Football (aka Soccer) UVA 10194

说说:万万没想到会在这道题上花费这么多时间.这道题其实就是比较繁琐而已,需要一个比较大的结构记录一个队伍的所有信息.原以为最难的是对比赛结果字符串的提取,但事实证明这倒还挺简单的.关键是后面对比赛结果的排序,原理相对简单,代码较庞大.需要注意的是,最后如果按队名排序是不区分大小写的,并且队名不只是英文字母!而且这里提一下C的语言特性,如果在调用一个返回字符指针的函数,且返回的是被调用函数内定义的字符数组,那样是会出错的,因为子函数调用结束后相应的资源就被释放了.要关注细节呀~哈哈~ 题目: Fo

小白书练习题5.5.3 排序检索类、

UVA 340 Master-Mind Hints 题意:猜数字游戏,给n个数的序列给你.接下来一行是答案序列.剩下的都是猜测序列.对于每一个猜测序列,统计有多少个数字相同并且位置相同.有多少数字相同位置不同.每一个数字只能用一次. 思路:直接统计可以求出数字相同并且位置相同的哪一些数.在此过程中我加了一个标记数组.标记那些用过的数的位置为1,没用过为0:然后枚举猜测中哪些没用过的数字.去答案序列中找.当数字相等并且答案行中那个数也没用过时.计数加1: 1 #include<cstdio> 2

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

计划,,留

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 一.<算法竞赛入门经典> 刘汝佳 (UVaOJ 351道题) 以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html "AOAPC I"

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

计算机科学及编程导论(7)数组及可变性、字典、伪代码,代码运行效率简介

1. 数组及可变性 当创建一个数组的时候,它将与一个对象进行绑定 L1 = [1, 2, 3] L2 = L1 L1[0] = 4 print(L2)#=>[4, 2, 3] L2 = L1 意味着L2与L1指向同一个对象,而L1[0]=4则改变了对象的值,所以最终L2的值也会改变,可以与下面这个例子进行比较 a = 1 #a指向对象1 b = a #b指向对象a a = 4 #此时a指向了对象4 print(b) #=>1,由于b依旧指向对象1,所以没有发生变化 2.字典 字典包括了以下几个

表情符号备忘单

表情符号备忘单 此页上列出的emoji 表情图释支持篝火. GitHub, Basecamp. Redbooth. Trac. Flowdock. Sprint.ly. Kandan. Textbox.io. Kippt. Redmine. JabbR.特雷略.大厅. Qiita.创业.红宝石中国.格罗夫. Idobata. NodeBB 论坛.可宽延时间. Streamup. OrganisedMinds. Hackpad. Cryptbin.加藤.据报.开朗鬼. IRCCloud. Dash