zoukankan      html  css  js  c++  java
  • 【PAT甲级】1075 PAT Judge (25 分)

    题意:

    输入三个正整数N,K,M(N<=10000,K<=5,M<=100000),接着输入一行K个正整数表示该题满分,接着输入M行数据,每行包括学生的ID(五位整数1~N),题号和该题得分(-1表示没通过编译)。输出排名,学生ID,总分和每一题的得分,第一优先为总分降序,第二优先为题目AC数降序,第三优先为学生ID升序(提交但未通过编译得分为0,未提交得分为-,不输出没有提交或者提交全都未通过编译的学生信息)。

    trick:

    测试点4为有学生先交了得到分的程序后该题后来又交了未通过编译的程序,注意分支结构不要出错。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 typedef struct student{
     5     int id;
     6     int score[7];
     7     int sum;
     8     int num;
     9 };
    10 student a[10007],b[10007];
    11 int total[7];
    12 bool cmp(student x,student y){
    13     if(x.sum!=y.sum)
    14         return x.sum>y.sum;
    15     if(x.num!=y.num)
    16         return x.num>y.num;
    17     return x.id<y.id;
    18 }
    19 int main(){
    20     int n,k,m;
    21     scanf("%d%d%d",&n,&k,&m);
    22     for(int i=1;i<=n;++i)
    23         for(int j=1;j<=k;++j)
    24             a[i].score[j]=-1;
    25     for(int i=1;i<=k;++i)
    26         scanf("%d",&total[i]);
    27     for(int i=1;i<=m;++i){
    28         int id,num,val;
    29         scanf("%d%d%d",&id,&num,&val);
    30         if(val>-1)
    31             a[id].id=id;
    32         else if(a[id].score[num]<0)
    33             a[id].score[num]=0;
    34         if(val>a[id].score[num])
    35             a[id].score[num]=val;
    36     }
    37     int cnt=0;
    38     for(int i=1;i<=n;++i)
    39         if(a[i].id){
    40             b[++cnt]=a[i];
    41             for(int j=1;j<=k;++j){
    42                 b[cnt].sum+=max(0,b[cnt].score[j]);
    43                 if(b[cnt].score[j]==total[j])
    44                     ++b[cnt].num;
    45             }
    46         }
    47     sort(b+1,b+1+cnt,cmp);
    48     int rank_=0;
    49     b[0].sum=1e9;
    50     for(int i=1;i<=cnt;++i){
    51         if(b[i].sum<b[i-1].sum)
    52             rank_=i;
    53         printf("%d %05d %d",rank_,b[i].id,b[i].sum);
    54         for(int j=1;j<=k;++j)
    55             if(b[i].score[j]==-1)
    56                 printf(" -");
    57             else
    58                 printf(" %d",b[i].score[j]);
    59         printf("
    ");
    60     }
    61     return 0;
    62 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    多台计算机之间数据同步——1.[转]网线制作图解教程
    离心泵的使用注意事项泄露或未排气造成扬程不够
    家庭上网用路由器和ADSL的连接
    专业FLV地址解析
    [求助]带程序访问控制的防火墙 eTrust Personal Firewall 和卡巴斯基2009引起冲突造成系统频繁死机
    DV录像带导出一定要用1394
    Cursor:url()的使用
    理解并解决JavaScript内存泄漏
    CodeIgniter的HMVC
    关于在IE下JavaScript的 Stack overflow at line 错误可能的原因
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11811202.html
Copyright © 2011-2022 走看看