PTA L2-009 抢红包(25 分)

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

输入格式:

输入第一行给出一个正整数N(<= 104),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:
K N~1~ P~1~ … N~K~ P~K~
其中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


解题思路:

看着很不好理解,但是分析一下还是能看懂题意,思路也相对清楚,只是代码比较繁琐难以实现:先一个结构体数组,x记录是第几个人,y记录钱数,z记录抢到红包的个数,根据题目的三个条件,列出以下函数:

int G(O a,O c)
{if(a.y==c.y){if(a.z!=c.z)return a.z>c.z;else return a.x<c.x;}return a.y>c.y;
}

然后你就慢慢一步步分析敲代码吧…这个也用了我相当多的时间…


代码实现:

#include<bits/stdc++.h>
using namespace std;
struct O
{int x;float y;int z;
}o[10010];//开结构体数组:x记录是第几个人,y记录钱数,z记录抢到红包的个数
int G(O a,O c)
{if(a.y==c.y){if(a.z!=c.z)return a.z>c.z;else return a.x<c.x;}return a.y>c.y;
}//按照题目要求排序输出....收入金额从高到低的递减顺序输出
//如果收入金额有并列,则按抢到红包的个数递减输出
//如果还有并列,则按个人编号递增输出....
int main()
{memset(o,0,sizeof(o));//数组归零int N;scanf("%d",&N);for(int i=1;i<=N;i++){int M;int sum=0;scanf("%d",&M);o[i].x=i;for(int j=0;j<M;j++){int X,Y;scanf("%d",&X);scanf("%d",&Y);o[X].y+=Y;o[X].z++;sum+=Y;}o[i].y-=sum;}sort(o+1,o+1+N,G);//排序for(int i=1;i<=N;i++){printf("%d %.2f\n",o[i].x,o[i].y/100);}
}

PTA L2-009 抢红包(25 分)相关推荐

  1. 【CCCC】L2-009 抢红包 (25分),,间接排序,比较double大小

    problem L2-009 抢红包 (25分) 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢红包的记录,请你统计一下他们抢红包的收获. 输入格式: 输入第一行给出一个正整数N(≤10 ​ ...

  2. L2-009 抢红包 (25 分)(C语言)(排序)

    题目 L2-009 抢红包 (25 分) 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢红包的记录,请你统计一下他们抢红包的收获. 输入格式: 输入第一行给出一个正整数N(≤10 4 ),即 ...

  3. PTA L2-2 冰岛人 (25分)

    PTA L2-2 冰岛人 (25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普如下: 冰岛 ...

  4. 7-4 抢红包 (25分)

    7-4 抢红包 (25分) 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢红包的记录,请你统计一下他们抢红包的收获. 输入格式: 输入第一行给出一个正整数N(≤10​4​​),即参与发红包和 ...

  5. C语言 7-7 抢红包 (25分)

    7-7 抢红包 (25分 题目 代码块 题目 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢红包的记录,请你统计一下他们抢红包的收获. 输入格式: 输入第一行给出一个正整数N(≤10​4), ...

  6. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

  7. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  8. [PTA]L2-001 紧急救援 (25 分)

    L2-001 紧急救援 (25 分) Description 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每 ...

  9. C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)

    1055 集体照 (25 分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任 ...

  10. C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)

    1045 快速排序 (25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 ...

最新文章

  1. 定档12月22日!《黑客帝国4》王者归来,再掀矩阵革命
  2. 电大法学本科计算机考试题,电大法学本科计算机形成性考核作业
  3. FastDFS:Java客户都实现文件的上传、下载、修改、删除
  4. 漫步数理统计十三——特殊的期望
  5. Windows环境中jdk的下载、安装与配置
  6. python词频统计西游记实验报告_Python文本统计功能之西游记用字统计操作示例
  7. 电子书格式,ePub将是趋势
  8. 如何更改python界面颜色_pycharm修改界面主题颜色的方法 pycharm怎么恢复默认设置...
  9. mybatis where 标签使用
  10. 安卓使用POI读取及修改Word文档(.doc格式)
  11. 家居收纳打造一个美好的家-央央家政家居收纳
  12. ENVI高光谱分析操作步骤
  13. 洛谷P3975【天津省选2015】(后缀自动机DP)
  14. C++基本功和 Design Pattern系列 Operator 下
  15. 先广度后深度,打开编程视野
  16. 云计算实训之项目3-基于微信实现自动化监控报警
  17. 分布式事务框架seata介绍
  18. linux命令之 whatis
  19. 苹果屏幕自动变暗_苹果iOS 14震撼发布 全新功能对标安卓
  20. Android网络通信(HttpURLConnection)和 数据传输格式(JSON)

热门文章

  1. #CSDN21天学习挑战赛#Python入门之pdfplumber模块——自动化操作PDF文件详细教程(2)
  2. 云计算入门+虚拟化技术
  3. 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾。
  4. csdn博客内容首行缩进
  5. 是时候,重新认识一下项目经理了
  6. 白盒测试、黑盒测试、灰盒测试
  7. 亚太地区,阿里云凭什么连续两年领先亚马逊AWS?
  8. java 替换 word_Java 在 Word 文档中使用新文本替换指定文本的方法
  9. 谷歌“猜画小歌”被吐槽:这AI怕是个傻子吧
  10. android华为推送不显示角标,V6项目集成华为推送流程和角标显示处理