#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;
}
207 - PGA Tour Prize Money
最新推荐文章于 2023-10-25 14:12:36 发布