207 - PGA Tour Prize Money

31 篇文章 0 订阅
#include<iostream>
#include<stdio.h>
#include<string>
#include<iomanip>
#include<queue>
#include<algorithm>
#include<sstream>
using namespace std;
int flag=1;
struct person
{
  string name,place,money,total;
  string r[5];
  int ir[5];
  int two;
  bool major;
  person(string sname,string r1,string r2,string r3,string r4)
 {
   r[1]=r1;
   r[2]=r2;
   r[3]=r3;
   r[4]=r4;
   for(int i=1;i<5;i++)
   {
     if('D'!=r[i][0])
     {
       stringstream ss(r[i]);
       ss>>ir[i];
     }
     else
     {
       ir[i]=10000;
       r[i]="  ";
       total="DQ";
     }
   }
   ir[0]=ir[1]+ir[2]+ir[3]+ir[4];
   two=ir[1]+ir[2];
   sname.erase(sname.find_last_not_of(" ")+1);
   name=sname;
   major=(name[name.size()-1]!='*');
 }
 
 bool operator < (const person& p) const
 {
  if(flag==0)
  {
   if(ir[0]>p.ir[0])
   return true;
   return false;
  }
  else
  {
    if(two>p.two)
    return true;
    return false;
  }
 }
};
const int maxn=144+3;
float percen[72];
priority_queue<person> pp;
priority_queue<person> pptol;
int main()
{
  int ca,n;
  string haha;
  while(cin>>ca) 
  {
    getline(cin,haha);
    getline(cin,haha);
    n=71;
    while(n--)
    {
     cin>>percen[70-n];
    }
    cin>>n;
    getline(cin,haha);
    while(n--)
    {
      string ren;
      getline(cin,ren);
      pp.push(person(ren.substr(0,20),ren.substr(20,3),ren.substr(23,3),ren.substr(26,3),ren.substr(29,3)));
    }
    flag=0;
    for(n=0;;n++)
    {
      person pt=pp.top();
      pptol.push(pt);
      pp.pop();
      person pt1=pp.top();
      if(n>=69&&(pt.two!=pt1.two))
         break;
    }
    
    vector<person> vp;
    while(!pptol.empty())
    {
      vp.push_back(pptol.top());
      pptol.pop();
    }
    int index=1;
    int tien=0,ame=0; //tien not include the ame
    float tiemoney=0.0;
    for(int i=0;i<vp.size();i++)
    {
      string pla;
      stringstream ss;
      ss<<i+1;
      pla=ss.str();
      vp[i].place=pla;
      if(vp[i].major)
      {
        char smoney[30];
        sprintf(smoney,"%.2f",percen[index++]*(percen[0]/100)); 
        vp[i].money=smoney;
      }
      if(i<vp.size()-1)
      {
      if((vp[i]).ir[0]==(vp[i+1]).ir[0])//compute the num of tien ,ame,tiemoney*tien
      {
        int k=i;
        while((vp[k]).ir[0]==(vp[k+1]).ir[0])//tie
        {
          if(!vp[i].major) //ame
          {
            ame++;  
          }
          else
          { 
            tien++;
            tiemoney=tiemoney+percen[index++];
          }
          k++;
          if(k>=vp.size()-1)
          break;
        }
        if(vp[k].major)
          tien++;
        else
          ame++;
        float pertie=tiemoney/(float)tien*(percen[0]/100);
        char smoney[30];
        sprintf(smoney,"%.2f",pertie);
        string mtp(smoney);
        stringstream ss;
        ss<<i+1;
        pla=ss.str();
        for(k=i;k<(i+tien+ame);k++)
        {
          if(vp[k].major)
          {
            vp[k].money=mtp;
            vp[k].place=pla+"T";
          }
          else
            vp[k].place=pla;
        }
        i+=tien+ame-1;
        tien=0;
        ame=0;
        tiemoney=0;
      }
      }
    }
    cout<<"Player Name          Place     RD1  RD2  RD3  RD4  TOTAL     Money Won "<<endl;
    for(int y=0;y<71;y++)
    cout<<"-";
    cout<<endl;
    for(int x=0;x<vp.size();x++)
    {
       if((!vp[x].major)||("DQ"==vp[x].total))
       cout<<resetiosflags(ios::right)<<setiosflags(ios::left)<<setw(21)<<vp[x].name<<setw(10)<<vp[x].place<<setw(5)<<(vp[x]).r[1]<<setw(5)<<(vp[x]).r[2]<<setw(5)<<(vp[x]).r[3]<<setw(5)<<(vp[x]).r[4]<<setw(10)<<vp[x].total<<endl;
       else
		   cout<<resetiosflags(ios::right)<<setiosflags(ios::left)<<setw(21)<<vp[x].name<<setw(10)<<vp[x].place<<setw(5)<<(vp[x]).r[1]<<setw(5)<<(vp[x]).r[2]<<setw(5)<<(vp[x]).r[3]<<setw(5)<<(vp[x]).r[4]<<setw(10)<<vp[x].ir[0]<<setw(1)<<"$"<<setiosflags(ios::right)<<setw(9)<<vp[x].money<<endl;
    }

  }
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值