zoukankan      html  css  js  c++  java
  • L2-009. 抢红包 结构体排序

    L2-009. 抢红包

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。

    输入格式:

    输入第一行给出一个正整数N(<= 104),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:

    K N1 P1 ... NK PK

    其中K(0 <= K <= 20)是发出去的红包个数,Ni是抢到红包的人的编号,Pi(> 0)是其抢到的红包金额(以分为单位)。注意:对于同一个人发出的红包,每人最多只能抢1次,不能重复抢。

    输出格式:

    按照收入金额从高到低的递减顺序输出每个人的编号和收入金额(以元为单位,输出小数点后2位)。每个人的信息占一行,两数字间有1个空格。如果收入金额有并列,则按抢到红包的个数递减输出;如果还有并列,则按个人编号递增输出。

    输入样例:
    10
    3 2 22 10 58 8 125
    5 1 345 3 211 5 233 7 13 8 101
    1 7 8800
    2 1 1000 2 1000
    2 4 250 10 320
    6 5 11 9 22 8 33 7 44 10 55 4 2
    1 3 8800
    2 1 23 2 123
    1 8 250
    4 2 121 4 516 7 112 9 10
    
    输出样例:
    1 11.63
    2 3.63
    8 3.63
    3 2.11
    7 1.69
    6 -1.67
    9 -2.18
    10 -3.26
    5 -3.26
    4 -12.32


    直接用一个结构体数组存取信息就行了,但是有几个问题:

    1.double不能作比较,在写cmp函数的时候还是要比较total,所以先把total定义int型,最后强转。

    2.这里出现了玄学的问题,结构体数组定义在main的时候,如果不用memset初始化,数组开到10000,最后一个测试点过不了,如果把数组开到100000,就全A了,或者把结构体数组定义在全局main方法之外,也可全A,或者定义在main之内,用memset初始化,也可A。关键就是在没有初始化,结构体里面值是随机的也可以理解,但在数组多开一个0为什么也能A的情况就不懂了?


    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 10000 + 5;
    struct Member {
        int shou;
        int fa;
        int total;
        int num;
        int id;
        };
    
    //double ans[maxn];
    
    bool cmp(Member m1,Member m2) {
        if(m1.total != m2.total) {
            return m1.total > m2.total;
        }
        else if(m1.num != m2.num) {
            return m1.num > m2.num;
        }
        else {
            return m1.id < m2.id;
        }
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        Member m[maxn];
        int n;
        memset(m,0,sizeof(m));
        cin>>n;
        for(int i = 0; i < n; i++) {
            m[i].id = i;
        }
        int k,d,mon;
        for(int i = 0; i < n; i++) {
            cin>>k;
            int sum = 0;
            while(k--) {
                cin>>d>>mon;
                m[d-1].shou += mon;
                sum += mon;
                m[d-1].num++;
            }
            m[i].fa += sum;
        }
    
        for(int i = 0; i < n; i++) {
            m[i].total = m[i].shou - m[i].fa;
        }
    
        sort(m,m+n,cmp);
    
    
        for(int i = 0; i < n; i++) {
    //            ans[i] = (double)m[i].total/100.0;
                printf("%d %.2lf
    ",m[i].id+1,(double)m[i].total/100);
        }
        return 0;
    }
    


  • 相关阅读:
    TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
    理论基础+实战控制台程序实现AutoFac注入
    C# class 浅拷贝 与 深拷贝
    给定一个矩阵 A, 返回 A 的转置矩阵。
    [弹出消息] C#ShowMessageBox帮助类
    [弹出消息] C#MessageBox帮助类 (转载)
    [XML] C#XMLProcess操作Xml文档的帮助类 (转载)
    [XML] C# XmlHelper操作Xml文档的帮助类 (转载)
    [XML] resources的Xml配置文件 (转载)
    [XML] Resource帮助类
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256655.html
Copyright © 2011-2022 走看看