zoukankan      html  css  js  c++  java
  • [ACM_数据结构] 竞赛排名

    比赛排名 
    Time Limit:1000MS  Memory Limit:32768K

    Description:

    欢迎参加浙江工业大学“亚信联创杯”程序设计大赛,本次竞赛采用与 ACM/ICPC 相同的排名规则。也就是说,首先按照在规定时间内,做出的题数进行排名。如果多支队伍解题数目相同,则根据总用时加入惩罚时间进行排名。总用时和惩罚时间由每道解答正确的试题的用时加上惩罚时间而成。每道试题用时将从竞赛开始到试题解答被判定为正确为止,其间每一次错误的运行将被加罚20分钟时间,未正确解答的试题不计时。
    现在,我们得到了每支队伍的提交情况,你的任务就是给出排序后的结果。

    Input:

    只有一组数据,第一行为一个正整数 N (N <= 200) 。接下来 N 行,每行以一个队名开始,没有两个队的队名相同。这一行剩下的是该队正确提交时间和错误次数。一个负数表示该题未通过,一个非负数表示通过该题的时间,A(B) 表示通过时间为A,且之前错误过B次。

    Output:

    顺序输出队伍,每行由队名、解题数和总时间,并用一个空格隔开。

    Sample Input:

    10
    实验班1124王志鹏 2(1) 27(1) 36(1) 43 13 -2 19 89(1) 16 
    实验班1826赵扬 2 -3 50 136(2) 3 -1 20(1) 73(2) 17 
    健行理0118汪伟 0 20 130 41(1) 3 123(3) 23 149(1) 6 
    实验班0222肖健伟 3 73(1) 41 50(1) 53 -5 88 105 109 
    友情备用账号8 3 -2 67(1) 59 11  18 53 13 
    实验班0708郭亚东 1 -10 12 102(3) 30 -6 48 70(1) 73 
    计算机0302*陈诗妮 12 -2 118(1) 87 39  47 74 93 
    实验班1807金科清 1 4 8 11(1) 12 81(3) 22 29 32 
    实验班1401边韵强 0 130(4) 17 26(1) 4(1)  31 39 42 
    健行理0205葛人楷 14(1) -13 85(1) 60(2) 23  19 133(2) 27
    

    Sample Output:

    实验班1807金科清 9 280
    健行理0118汪伟 9 595
    实验班1124王志鹏 8 325
    实验班1401边韵强 8 409
    实验班0222肖健伟 8 562
    友情备用账号8 7 244
    实验班1826赵扬 7 401
    实验班0708郭亚东 7 416
    健行理0205葛人楷 7 481
    计算机0302*陈诗妮 7 490

     1 #include<iostream>
     2 #include<string>
     3 #include<string.h>
     4 #include<cstring>
     5 #include<sstream>
     6 #include<algorithm>
     7 using namespace std;
     8 class Student{
     9 public:
    10     string name;
    11     int num;
    12     int time;
    13 public:
    14     Student(){}
    15     void Set(string s){
    16         istringstream in(s);
    17         string temp;
    18         in>>name;
    19         num=0;time=0;
    20         while(in>>temp){
    21             for(int i=0;i<temp.length();i++)
    22                 if(temp[i]=='(' || temp[i]==')')temp[i]=' ';
    23             istringstream in2(temp);
    24             int iTime=0,iWrongNum=0;
    25             if(in2>>iTime){
    26                 if(iTime>=0){
    27                     num++;
    28                     time+=iTime;
    29                     if(in2>>iWrongNum){
    30                         time+=iWrongNum*20;
    31                     }
    32                 }
    33             }                    
    34         }
    35     }
    36     bool operator<(Student& a){
    37         if(num==a.num){
    38             return (time==a.time ? name<a.name:time<a.time);
    39         }else return num>a.num;
    40     }
    41     void print(){
    42         cout<<name<<' '<<num<<' '<<time<<'
    ';
    43     }
    44 };
    45 int main(){
    46     int N;cin>>N;
    47     string s;getline(cin,s);
    48     Student students[201];
    49     for(int i=0;i<N;i++){
    50         getline(cin,s);
    51         students[i].Set(s);
    52     }
    53     sort(students,students+N);
    54     for(int j=0;j<N;j++)
    55         students[j].print();
    56     return 0;
    57 }

    刚开始一直错最后把重载<改了一下就过啦!注意重载<时也要把次数、时间都相同的情况的情况考虑进去并把队名按照字母包顺序排列!!!

  • 相关阅读:
    eclips git中的add to Index无效解决
    关于Promise 简单使用理解
    小程序顶部可滚动导航
    读jQuery源码
    Web UI
    JavaScript滚动条插件源码
    Ajax异步刷新地址栏url改变(利用Html5 history.pushState实现)
    angular2如何按需加载?
    如何把bootstrap用webpack打包
    typings的理解
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3492128.html
Copyright © 2011-2022 走看看