Advertisement
shawon_majid

Football (aka soccer)

Jun 22nd, 2020
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.74 KB | None | 0 0
  1. //Bismillahir Rahman-ir Rahim
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define MAX 100000
  5. #define PI acos(-1)
  6. #define debug(x) cout << '>' << #x << " : " << x << endl;
  7. #define all(c) c.begin(), c.end()
  8. #define F first
  9. #define S second
  10. #define pb push_back
  11. #define mp make_pair
  12. typedef unsigned long long ull;
  13. typedef long long ll;
  14. typedef vector< int > vi;
  15.  
  16. typedef struct{
  17.     string name;
  18.     int total_ponints;
  19.     int games_played;
  20.     int wins;          
  21.     int ties;
  22.     int losses;
  23.     int goal_difference; // baki
  24.     int goal_scored;
  25.     int goal_against;
  26. }team_profile;
  27.  
  28. string tolower_str(string str)
  29. {
  30.     string ans = "";
  31.     for(int i = 0; i < str.size(); i++){
  32.         ans += tolower(str[i]);
  33.     }
  34.     return ans;
  35. }
  36.  
  37. int string_to_num(string s){
  38.     int ans = 0;
  39.     if(s.size() == 1){
  40.         ans = s[0] - 48;
  41.     }
  42.     else{
  43.         ans = 0;
  44.         for(int i = 0, p = s.size()-1; i < s.size(); i++, p--){
  45.             ans += (s[i] - '0')*round(pow(10, p));
  46.         }
  47.     }
  48.     return ans;
  49. }
  50.  
  51. bool compare(team_profile a, team_profile b){
  52.     if(a.total_ponints == b.total_ponints){
  53.         if(a.wins == b.wins){
  54.             if(a.goal_difference == b.goal_difference){
  55.                 if(a.goal_scored == b.goal_scored){
  56.                     if(a.games_played == b.games_played){
  57.                         return tolower_str(a.name)  < tolower_str(b.name);
  58.                     }
  59.                     else return a.games_played < b.games_played;
  60.                 }
  61.                 else return a.goal_scored > b.goal_scored;
  62.             }
  63.             else return a.goal_difference > b.goal_difference;
  64.         }
  65.         else return a.wins > b.wins;
  66.     }
  67.     else return a.total_ponints > b.total_ponints;
  68. }
  69.  
  70.  
  71. int main()
  72. {
  73.     //freopen("input.txt", "r", stdin);
  74.     //freopen("output.txt", "w", stdout);
  75.  
  76.     int T;
  77.     cin >> T;
  78.     getchar(); // problematic
  79.     while(T--) {
  80.        
  81.         string tournament_name;
  82.         getline(cin, tournament_name);
  83.         cout << tournament_name << endl;
  84.         int number_of_teams;
  85.         cin >> number_of_teams;
  86.         vector <team_profile> teams(number_of_teams);
  87.         getchar();
  88.         for(int i = 0; i < number_of_teams; i++){
  89.             getline(cin, teams[i].name);
  90.         }
  91.         int number_of_matches;
  92.         cin >> number_of_matches;
  93.         getchar();
  94.         for(int c = 0; c < number_of_matches; c++){
  95.             string str, team1 = "", team2 = "", sc1 = "", sc2 = "";
  96.             int score1, score2, track;
  97.             getline(cin, str);
  98.             // take the first team name;
  99.             for(int i = 0; i < str.size(); i++){
  100.                 if(str[i] != '#'){
  101.                     team1 += str[i];
  102.                 }
  103.                 else{
  104.                     track = i;
  105.                     break;
  106.                 }
  107.             }
  108.             //take the score1
  109.             for(int i = track+1; i < str.size(); i++){
  110.                 if(str[i] != '@'){
  111.                     sc1 += str[i];
  112.                 }
  113.                 else{
  114.                     track = i;
  115.                     break;
  116.                 }
  117.             }
  118.             score1 = string_to_num(sc1);
  119.             // take the score2
  120.             for(int i = track+1; i < str.size(); i++){
  121.                 if(str[i] != '#'){
  122.                     sc2 += str[i];
  123.                 }
  124.                 else{
  125.                     track = i;
  126.                     break;
  127.                 }
  128.             }
  129.             score2 = string_to_num(sc2);
  130.             // take the last team
  131.             for(int i = track+1; i < str.size(); i++){
  132.                 team2 += str[i];
  133.             }
  134.          
  135.             bool win1 = false, win2 = false;
  136.             if(score1 > score2){
  137.                 win1 = true;
  138.                 win2 = false;
  139.             }
  140.             else if(score2 > score1){
  141.                 win2 = true;
  142.                 win1 = false;
  143.             }
  144.             //find team1;
  145.  
  146.             for(int i = 0; i < teams.size(); i++){
  147.                 if(team1 == teams[i].name){
  148.                     teams[i].games_played++;
  149.                     teams[i].goal_scored += score1;
  150.                     teams[i].goal_against += score2;
  151.                     if(win1 && !win2){
  152.                         teams[i].wins++;
  153.                     }
  154.                     else if(!win1 && win2){
  155.                         teams[i].losses++;
  156.                     }
  157.                     else teams[i].ties++;
  158.                 }
  159.                
  160.             }
  161.             // find team2;
  162.             for(int i = 0; i < teams.size(); i++){
  163.                 if(team2 == teams[i].name){
  164.                     teams[i].games_played++;
  165.                     teams[i].goal_scored += score2;
  166.                     teams[i].goal_against += score1;
  167.                     if(!win1 && win2){
  168.                         teams[i].wins++;
  169.                     }
  170.                     else if(win1 && !win2){
  171.                         teams[i].losses++;
  172.                     }
  173.                     else teams[i].ties++;
  174.                 }
  175.             }
  176.            
  177.         }
  178.         for(int i = 0; i < teams.size(); i++){
  179.             teams[i].total_ponints = (teams[i].wins*3) + (teams[i].ties);
  180.             teams[i].goal_difference = teams[i].goal_scored - teams[i].goal_against;
  181.         }
  182.  
  183.         sort(all(teams), compare);
  184.  
  185.         for(int i = 0; i < teams.size(); i++){
  186.             cout << i+1 << ") "<<teams[i].name <<" " <<teams[i].total_ponints <<"p, "<<teams[i].games_played<<"g ("<<teams[i].wins<<"-"<<teams[i].ties<<"-"<<teams[i].losses<<"), "<< teams[i].goal_difference << "gd (" <<teams[i].goal_scored<<"-"<<teams[i].goal_against<<")"<< endl;  
  187.         }
  188.         if(T != 0)  cout << endl;
  189.     }
  190.  
  191.     return 0;
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement