• ZJNU 1164


    1、如果一个单元为0,表示没做过这题,不计入成绩

    2、如果一个单位为负数,表示做错了这题,不计入成绩

    所以只要一个单元为正数(不论是否有括号)都说明做出了这一题,计入成绩

    将名字和成绩都当作字符串读入,方便处理含有括号的情况

    字符串读入后检查末尾是否为')'即可分开判断有无括号的情况(如果有括号,成绩一定存在)

    为了方便可以用 结构体/自定义函数/排序自定义compare函数 来实现

    当然,不使用结构体可以用普通数组代替

    不使用algorithm库的sort可以用冒泡选择这两种基本排序做(不会存在卡时间的情况)

    做法1:C/无结构体/无sort

    #include<stdio.h>
    #include<string.h>
    int main(){
        int i,u,n,m,tm[10000],ac[10000],poi=0,id,dt;
        char nm[10000][11],cd[11],k;
        scanf("%d%d",&n,&m);
        while(scanf("%s",nm[poi])!=EOF){
            tm[poi]=0;
            ac[poi]=0;
            for(i=0;i<n;i++){
                scanf("%d",&dt);
                if(dt>0){
                    ac[poi]++;
                    tm[poi]+=dt;
                    scanf("%c",&k);
                    if(k=='('){
                        scanf("%d%*c",&dt);
                        tm[poi]+=dt*m;
                    }
                }
            }
            poi++;
        }
        for(i=0;i<poi;i++)//排序
            for(u=poi-1;u>i;u--)
                if(ac[u]>ac[u-1]||ac[u]==ac[u-1]&&tm[u]<tm[u-1]||ac[u]==ac[u-1]&&tm[u]==tm[u-1]&&strcmp(nm[u-1],nm[u])>0){
                    id=ac[u];
                    ac[u]=ac[u-1];
                    ac[u-1]=id;
                    id=tm[u];
                    tm[u]=tm[u-1];
                    tm[u-1]=id;
                    strcpy(cd,nm[u]);
                    strcpy(nm[u],nm[u-1]);
                    strcpy(nm[u-1],cd);
                }
        for(i=0;i<poi;i++)
            printf("%-10s %2d %4d
    ",nm[i],ac[i],tm[i]);
        
        return 0;
    }

    做法2:C++/结构体/sort

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct node{
        char name[15];
        int sum,ac;
    }stu[10000];
    int m;
    char dat[15];
    int getDigit(int l,int r){
        int i=l,res=0,f=1;
        if(dat[i]=='-'){
            f=-1;
            i++;
        }
        for(;i<r;i++)
            res=res*10+dat[i]-'0';
        return f*res;
    }
    int getDScore(int len){
        int i;
        for(i=0;i<len;i++)
            if(dat[i]=='(')
                break;
        return getDigit(0,i)+m*getDigit(i+1,len-1);
    }
    bool cmp(node a,node b){
        if(a.ac!=b.ac)
            return a.ac>b.ac;
        if(a.sum!=b.sum)
            return a.sum<b.sum;
        return strcmp(a.name,b.name)==-1;
    }
    int main(){
        int n,i,t=0,len,d;
        scanf("%d%d",&n,&m);
        while(scanf("%s",stu[t].name)!=EOF){
            for(i=1;i<=n;i++){
                scanf("%s",dat);
                len=strlen(dat);
                if(dat[len-1]!=')'){
                    d=getDigit(0,len);
                    if(d>0){
                        stu[t].sum+=d;
                        stu[t].ac++;
                    }
                }
                else{
                    stu[t].sum+=getDScore(len);
                    stu[t].ac++;
                }
            }
            t++;
        }
        sort(stu,stu+t,cmp);
        for(i=0;i<t;i++)
            printf("%-10s %2d %4d
    ",stu[i].name,stu[i].ac,stu[i].sum);
        
        return 0;
    }
  • 相关阅读:
    CF1056G
    mysql xtrabackup 备份恢复
    linux yum源配置
    mysql 第24章 优化
    mysql 第23章 监控
    mysql 第22章 高可用MMM、MHA
    mysql 第21章 集群
    mysql 第20章 复制
    mysql 第19章 备份恢复
    mysql 第18章 导入导出
  • 原文地址:https://www.cnblogs.com/stelayuri/p/12233397.html
Copyright © 2020-2023  润新知