L2-009 Grab paquetes rojos (simulación)

enlace de tema

https://pintia.cn/problem-sets/994805046380707840/problems/994805066890854400

ideas

Abrimos una estructura Nodepara almacenar el número id, el número de sobres rojos recibidos y numla cantidad total de sobres rojos obtenidos money, y luego trataremos con los sobres rojos recibidos por cada línea de personas, moneyreduciremos la cantidad de sobres rojos y luego use los sobres rojos para recibir sobres rojos. El número de personas moneyaumenta, y el número de sobres rojos para aquellos que reciben sobres rojos aumentará, y la clasificación final y la salida estarán bien.

código

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f

const int N = 1e4+10;

int n;

struct Node{
    
    
	int id,num;
	double money;
}people[N];

bool cmp(Node a,Node b) {
    
    
	if(fabs(a.money-b.money) <= 0.0001)
		if(a.num == b.num) 
			return a.id < b.id;
	else
		return a.num > b.num;
	return a.money > b.money;
}

map<int,bool> vis;

int main()
{
    
    
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	int k,a;
	double b;
	for(int i = 1;i <= n; ++i){
    
    
		cin>>k;
		people[i].id = i;
		double sum = 0;
		vis.clear();
		for(int j = 1;j <= k; ++j) {
    
    
			cin>>a>>b;
			if(vis[a]) continue;
			vis[a] = true;
			people[i].money -= b;
			people[a].num++;
			people[a].money += b;
		}
	}
	
	sort(people+1,people+1+n,cmp);
	cout<<fixed<<setprecision(2);
	for(int i = 1;i <= n; ++i) {
    
    
		cout<<people[i].id<<" "<<people[i].money/100.0<<endl;
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_46201544/article/details/123804795
Recomendado
Clasificación