题目:题目详情 - L2-009 抢红包 (25 分) (pintia.cn)

大意:

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

KN1​P1​⋯NK​PK​

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

 

思路

运用结构体排序 

坑点

 需要多定义变量,思路要清晰

步骤一:先bool判断真假

bool cmp(q a,q b)
{
	if (a.m > b.m)
		return true;
	else if(a.m<b.m)
		return false;
	else {
		if (a.num > b.num)
			return true;
		else if (a.num < b.num)
			return false;
		else {
			if (a.id > b.id)
				return false;
			else
				return true;
		}
	}
}

步骤二

int main()
{
	int num;
	cin >> num;
	for (int i = 1; i <= num; i++)
	{
		int ww;
		cin>>ww;
		rr[i].id = i;
		for (int j=0;j<ww;j++)
		{
			int id,m;
			cin >> id >> m;
			rr[i].m-=m;//发出去的红包金额
			rr[id].num++;//抢到的红包个数
			rr[id].m+=m;
		}
	}

 步骤三sort排序

sort(rr+1,rr+num+1,cmp);
	for (int i=1;i<=num;i++)
	{
		printf("%d %.2f\n",rr[i].id,1.0*rr[i].m/100);
	}