PAT(Basic Level) Practice : 1085 PAT单位排行 (25分)

1085 PAT单位排行 (25分)

参考> https://www.cnblogs.com/Dup4/p/9433200.html

测试点5的坑

必须取完整数之后再排序,比如
两个单位192.1<192.2
在取整之前他们的排名是不同的,但是取完整数之后排名就相同了。

代码

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;

#include<iomanip>
//精度

#include<cmath>
//round四舍五入取整
#include <map>

class school
{
public:
    string name;
    double grade1;
    double grade2;
    double grade3;
    double sum;
    int num;
    int sum1;
    school()
    {
        name="";
        grade1=0;//B
        grade2=0;//A
        grade3=0;//T
        sum=0;
        sum1=0;
        num=0;
    }
};

bool compare(school sc1,school sc2)
{
    if(sc1.sum1!=sc2.sum1)
        return sc1.sum1>sc2.sum1;
    else if(sc1.num!=sc2.num)
        return sc1.num<sc2.num;
    else
        return sc1.name.compare(sc2.name)<0;
}

int main()
{
    int n;
    cin>>n;

    vector<school> schools;
    map<string,int> nameIndex;
    for(int i=0;i<n;i++)
    {
        string str;
        int grade;
        string name;
        cin>>str>>grade>>name;
        for(int i=0;i<name.length();i++)
        {
            if(name[i]>='A'&&name[i]<='Z')
                name[i]=name[i]-'A'+'a';
        }
        if(nameIndex[name]==0)
        {
            school temp;
            temp.name=name;
            temp.num++;
            if(str[0]=='B')
                temp.grade1+=grade;
            else if(str[0]=='A')
                temp.grade2+=grade;
            else
                temp.grade3+=grade;

            schools.push_back(temp);
            //索引要加1
            nameIndex[name]=schools.size();
        }else
        {
            schools[nameIndex[name]-1].num++;
            if(str[0]=='B')
                schools[nameIndex[name]-1].grade1+=grade;
            else if(str[0]=='A')
                schools[nameIndex[name]-1].grade2+=grade;
            else
                schools[nameIndex[name]-1].grade3+=grade;


        }
    }
    for(int i=0;i<schools.size();i++)
    {
        schools[i].sum=schools[i].grade1/1.5+schools[i].grade2+schools[i].grade3*1.5;
        schools[i].sum1=schools[i].sum;
    }

    sort(schools.begin(),schools.end(),compare);

    cout<<schools.size()<<endl;
    int ranking;
    for(int i=0;i<schools.size();i++)
    {
        int res=schools[i].sum;
        if(i==0)
        {
            cout<<1;
            ranking=1;
        }
        else
        {
            if((int)schools[i].sum==(int)schools[i-1].sum)
            {
                cout<<ranking;
                //cout<<"Kkk"<<endl;
            }
            else
            {
                cout<<i+1;
                ranking=i+1;
            }
        }
        cout<<" "<<schools[i].name<<" "<<res<<" "<<schools[i].num<<endl;
    }
    return 0;
}

posted @ 2020-10-01 01:24  韩天尊  阅读(144)  评论(0)    收藏  举报