zoukankan      html  css  js  c++  java
  • PAT甲级1141 Ranking of Institutions

    题目https://pintia.cn/problem-sets/994805342720868352/problems/994805344222429184

    题意:

    给定几个学生的PAT分数和学校,给这些学校学生的PAT总分排序。

    思路:

    库函数tolower()和toupper()可以分别把字符串转换为都是小写字母和都是大写字母。

    这道题要注意的是,因为是加权的总分,算的时候应该用double。但是题目中有说,总分取加权之后的整数部分,全部加完后要转成int进行比较。

     1 //#include<bits/stdc++>
     2 #include<stdio.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cstring>
     6 #include<stdlib.h>
     7 #include<queue> 
     8 #include<map>
     9 #include<stack>
    10 #include<set>
    11 
    12 #define LL long long
    13 #define ull unsigned long long
    14 #define inf 0x7f7f7f7f 
    15 
    16 using namespace std;
    17 
    18 const int maxn = 1e5 + 5;
    19 int n;
    20 struct school{
    21     string name;
    22     int num;
    23     double sco;
    24     int rnk;
    25 }sch[maxn];
    26 set<string>school_name;
    27 set<string>::iterator iter;
    28 map<string, int>schoolid;
    29 
    30 bool cmp(school &a, school &b)
    31 {
    32     if((int)a.sco == (int)b.sco)
    33         if(a.num == b.num)return a.name < b.name;
    34         else return a.num < b.num;
    35     else return (int)a.sco > (int)b.sco;
    36 }
    37 
    38 struct student{
    39     string name;
    40     double sco;
    41     string sch;
    42 }stu[maxn];
    43 
    44 int main()
    45 {
    46     scanf("%d", &n);
    47     for(int i = 0; i < n; i++){
    48         cin>>stu[i].name>>stu[i].sco>>stu[i].sch;
    49         if(stu[i].name[0] == 'T')stu[i].sco *= 1.5;
    50         else if(stu[i].name[0] == 'B')stu[i].sco /= 1.5;
    51         transform(stu[i].sch.begin(), stu[i].sch.end(), stu[i].sch.begin(), ::tolower);
    52         school_name.insert(stu[i].sch);
    53     }
    54     int id = 0;
    55     for(iter = school_name.begin(); iter != school_name.end(); iter++){
    56         string s = *iter;
    57         sch[id].name = s;
    58         schoolid[s] = id++;
    59     }
    60     
    61     for(int i = 0; i < n; i++){
    62         int sid = schoolid[stu[i].sch];
    63         sch[sid].num++;
    64         sch[sid].sco += stu[i].sco;
    65     }
    66     
    67     sort(sch, sch + id, cmp);
    68     int rnk = 0, tie = 0;
    69     printf("%d
    ", id);
    70     for(int i = 0; i < id; i++){
    71         sch[i].sco = (int)sch[i].sco;
    72         if(i != 0 && sch[i].sco == sch[i - 1].sco){
    73             tie++;
    74         }
    75         else{
    76             rnk += tie + 1;
    77             tie = 0;
    78         }
    79         cout<<rnk<<" "<<sch[i].name<<" "<<sch[i].sco<<" "<<sch[i].num<<endl;
    80     }
    81     
    82     return 0;    
    83 } 
  • 相关阅读:
    直接用ISO文件在linux上安装新系统
    vsftpd config备忘
    失恋那回事~~~
    Java之深入JVM(0) 序
    No.6 ThreadLocal类及应用技巧
    Java之多线程(1) Race Condition引起的性能问题
    NO.10 Callable与Future的应用
    NO.5 线程范围内共享变量的概念与作用(二)
    NO.5 线程范围内共享变量的概念与作用(一)
    NO.7多个线程之间共享数据的方式探讨
  • 原文地址:https://www.cnblogs.com/wyboooo/p/10522423.html
Copyright © 2011-2022 走看看