LEAGUE TABLES
時間限制: 1 Sec 內存限制: 128 MB
提交: 349 解決: 150
[提交] [狀態] [命題人:admin]
題目描述
League football (known in some circles as soccer) has been played in England since 1888 and is the most popular winter game through most of Europe, just as rugby is in New Zealand. English newspapers and many Websites publish the latest results and the current tables.
With English football, each team plays every other team both home and away, and at the end of the season, the team with most points wins the title. Points are awarded for winning (3 points) or drawing (1 point each). Teams level on points are separated by the larger goal difference, that is goals for (ie scored) minus goals against (ie conceded). If this is level, the team who has scored more goals is placed first.
In this problem you will be given a list of teams and their current record, followed by a list of matches. You have to update the record of each team who has a result recorded and output a correctly sorted league table.
輸入
The first line contains a single integer, T (8 <= T <= 30), which is the number of teams in the league. The next 2 x T lines each contain the current record of one team as follows:
The first line contains the team name which consists of one or more words, which may contain numbers. No name will be longer than 30 characters.
All numbers on the second line are non-negative integers.
The next line contains a single integer, G (0 < G <= (T/2)), which is the number of games recorded. There then follow 4 x G lines, each containing data on one game as follows:
The two teams will both be from the preceding list of teams. The scores will each be a non-negative integer less than 20.
輸出
T lines giving the updated record of each team from the input, name followed by data all on 1 line. Teams are to be sorted by highest points, then highest goal difference, then most goals scored, then alphabetical order (case insensitive, numbers before letters).
樣例輸入
復制樣例數據
18
Aston Villa
33 21 6 6 74 34 69
Sheffield United
34 18 12 4 63 33 66
Sunderland
33 18 3 12 47 34 57
Wolverhampton Wanderers
33 15 9 9 47 35 54
Derby County
33 13 8 12 43 42 47
Newcastle United
34 13 10 11 53 43 49
Manchester City
33 13 8 12 49 41 47
Nottingham Forest
34 13 8 13 56 55 47
Stoke City
34 13 8 13 37 45 47
Everton
33 13 7 13 46 30 46
Bury
33 13 6 14 40 57 45
Liverpool
33 13 5 15 47 45 44
Blackburn Rovers
33 12 4 17 47 60 40
West Bromwich Albion
34 11 8 15 43 51 41
Preston North End
33 12 4 17 37 45 40
Notts County
34 9 11 14 46 60 38
Burnley
34 11 5 18 34 54 38
Glossop
34 4 10 20 30 75 22
5
Aston Villa
3
Preston North End
1
Blackburn Rovers
2
Wolverhampton Wanderers
1
Derby County
2
Everton
1
Liverpool
2
Bury
0
Sunderland
3
Manchester City
1
樣例輸出
Aston Villa 34 22 6 6 77 35 72
Sheffield United 34 18 12 4 63 33 66
Sunderland 34 19 3 12 50 35 60
Wolverhampton Wanderers 34 15 9 10 48 37 54
Derby County 34 14 8 12 45 43 50
Newcastle United 34 13 10 11 53 43 49
Manchester City 34 13 8 13 50 44 47
Liverpool 34 14 5 15 49 45 47
Nottingham Forest 34 13 8 13 56 55 47
Stoke City 34 13 8 13 37 45 47
Everton 34 13 7 14 47 32 46
Bury 34 13 6 15 40 59 45
Blackburn Rovers 34 13 4 17 49 61 43
West Bromwich Albion 34 11 8 15 43 51 41
Preston North End 34 12 4 18 38 48 40
Notts County 34 9 11 14 46 60 38
Burnley 34 11 5 18 34 54 38
Glossop 34 4 10 20 30 75 22
題目大意:
先輸入一個整數nnn,代表有nnn支隊伍,下面2n2n2n行,每兩行代表一支隊伍當前的信息,先輸入隊伍的名稱,由字母、數字、空格組成,然后第二行依次輸入當前的比賽場數、勝場數、平局數、敗場數、進球數、失球數、得分。然后輸入一個數字ttt,代表還需進行ttt場比賽,下面4t4t4t行代表比賽的信息,每場比賽先輸入主場方的隊伍名稱,再輸入該場比賽的進球數,然后輸入客場隊伍的名稱,其隊伍的進球數。最后輸出ttt場比賽打完后各個隊伍的所有信息,先按得分排序,得分高得優先,得分相同者,凈球數(進球數-失球數)大者優先,凈球數相同者,進球數多者優先,進球數相同者,隊伍名字典序小者優先。
解題思路:
此題只需模擬一下即可,需注意的是,在比較隊伍名字典序時,需將隊伍名中的字母提取出來,不區分大小下來進行比較。
代碼:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
struct node
{string name;string str;int num;int win;int draw;int lose;int jin;int shi;int point;int cha;
}arr[120];
map<string,int> m;
bool cmp(node a,node b) {if(a.point==b.point) {if(a.cha==b.cha) {if(a.jin==b.jin) {return a.str<b.str;}else return a.jin>b.jin;}else return a.cha>b.cha;}else return a.point>b.point;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int n;cin>>n;rep(i,1,n) {while(getchar()!='\n');getline(cin,arr[i].name);m[arr[i].name]=i;arr[i].str="";for(int j=0;j<arr[i].name.size();j++) {if(arr[i].name[j]>='a'&&arr[i].name[j]<='z')arr[i].str+=arr[i].name[j];if(arr[i].name[j]>='A'&&arr[i].name[j]<='Z') arr[i].str+=(arr[i].name[j]+32);}cin>>arr[i].num>>arr[i].win>>arr[i].draw>>arr[i].lose>>arr[i].jin>>arr[i].shi>>arr[i].point;arr[i].cha=arr[i].jin-arr[i].shi;}int t;cin>>t;string s1,s2;int a,b;rep(i,1,t) {while(getchar()!='\n');getline(cin,s1);cin>>a;while(getchar()!='\n');getline(cin,s2);cin>>b;arr[m[s1]].num++;arr[m[s2]].num++;if(a==b) {arr[m[s1]].draw++;arr[m[s2]].draw++;arr[m[s1]].jin+=a;arr[m[s1]].shi+=b;arr[m[s2]].jin+=b;arr[m[s2]].shi+=a;arr[m[s1]].point++;arr[m[s2]].point++;arr[m[s1]].cha=arr[m[s1]].jin-arr[m[s1]].shi;arr[m[s2]].cha=arr[m[s2]].jin-arr[m[s2]].shi;}else if(a>b) {arr[m[s1]].win++;arr[m[s2]].lose++;arr[m[s1]].jin+=a;arr[m[s1]].shi+=b;arr[m[s2]].jin+=b;arr[m[s2]].shi+=a;arr[m[s1]].point+=3;arr[m[s1]].cha=arr[m[s1]].jin-arr[m[s1]].shi;arr[m[s2]].cha=arr[m[s2]].jin-arr[m[s2]].shi;}else {arr[m[s1]].lose++;arr[m[s2]].win++;arr[m[s1]].jin+=a;arr[m[s1]].shi+=b;arr[m[s2]].jin+=b;arr[m[s2]].shi+=a;arr[m[s2]].point+=3;arr[m[s1]].cha=arr[m[s1]].jin-arr[m[s1]].shi;arr[m[s2]].cha=arr[m[s2]].jin-arr[m[s2]].shi;}}sort(arr+1,arr+1+n,cmp);rep(i,1,n) {cout<<arr[i].name<<" "<<arr[i].num<<" "<<arr[i].win<<" "<<arr[i].draw<<" "<<arr[i].lose<<" "<<arr[i].jin<<" "<<arr[i].shi<<" "<<arr[i].point<<endl;}return 0;
}