首页 > 其他分享 >D. 摊位分配

D. 摊位分配

时间:2025-01-19 23:09:38浏览次数:1  
标签:cnt cmpt long t1 100005 摊位 ans 分配

  • 你的做法模拟到了所有社团都至少分到了1个格子,用double实现会有精度问题,既然可以避免就避免吧
  • 题解则观察到了分界值和划分出的席位数之间良好的单调关系,采用二分的方法求解
  • 但这种做法有严重的精度问题,根源在于分界值趋近于0,可以通过取log或者拆分整数和小数的方法优化
点击查看代码
#include <bits/stdc++.h>
using namespace std;
long long w[100005],cnt[100005];
long long ans[100005],u[100005];
struct t1
{
	long long cnt,w;
	long long i;
	bool pd;
};
auto cmpt=[](t1 a,t1 b)
{
	if(a.w*(1<<b.cnt)!=b.w*(1<<a.cnt))
	{
		return a.w*(1<<b.cnt)<b.w*(1<<a.cnt);
	}
	if(a.pd^b.pd)
	{
		return b.pd==true;
	}
	if(a.w!=b.w)
	{
		return a.w<b.w;
	}
	return a.i>b.i;
};
priority_queue<t1,vector<t1>,decltype(cmpt)>q(cmpt);
bool cmp(long long a,long long b)
{
	if(w[a]*(1<<cnt[b])!=w[b]*(1<<cnt[a]))
	{
		return w[a]*(1<<cnt[b])>w[b]*(1<<cnt[a]);
	}
	if(w[a]!=w[b])
	{
		return w[a]>w[b];
	}
	return a<b;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	long long n,h;
	cin>>n>>h;
	for(long long i=1;i<=n;i++)
	{
		cin>>w[i];
		q.push((t1){0,w[i],i,true});
		u[i]=i;
	}
	long long sum=0;
	while(sum!=n&&h!=0)
	{
		t1 n1=q.top();
		q.pop();
		long long i=n1.i;
		ans[i]++;
		cnt[i]++;
		h--;
		sum+=(ans[i]==1);
		q.push((t1){cnt[i],w[i],i,false});
	}
	if(h>0)
	{
		for(long long i=1;i<=n;i++)
		{
			ans[i]+=(h/n);
		}
		h%=n;
		sort(u+1,u+n+1,cmp);
		for(long long i=1;i<=h;i++)
		{
			ans[u[i]]++;
		}
	}
	for(long long i=1;i<=n;i++)
	{
		cout<<ans[i]<<" ";
	}
	cout<<endl;
	return 0;
}

标签:cnt,cmpt,long,t1,100005,摊位,ans,分配
From: https://www.cnblogs.com/watersail/p/18680477

相关文章

  • 什么是空间分配担保机制?
     作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源......
  • 113_基于springboot的疫情物资捐赠和分配系统
    ......
  • 计算机毕业设计Springboot学员课外任务自主分配管理系统 Springboot学员课外任务管理
    计算机毕业设计Springboot学员课外任务自主分配管理系统dqyr3x0y(配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享在现代教育体系中,课外任务作为提升学员实践能力和理论知识应用的重要手段,其管理和分配过程对教育效果有着直接影响。......
  • 工单主替料自动分配数量
    *&---------------------------------------------------------------------**&ReportZPPR0045*&---------------------------------------------------------------------**&*&-----------------------------------------------------------------......
  • 全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
    系列文章目录01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南02-玩转LangChainMemory模块:四种记忆类型详解及应用场景全覆盖03-全面掌握LangChain:从核心链条构建到动态任务分配的实战指南文章目录系列文章目录前言一、LangChain的核心链简介1.1......
  • 人工智能如何影响社会公平与资源分配?
    引言随着人工智能(AI)技术的迅速发展,它已经渗透到社会生活的方方面面,从日常生活中的语音助手,到产业链中的自动化生产,再到金融领域的智能投资顾问,人工智能正在以前所未有的速度改变着世界。然而,随着技术的普及与应用,人工智能的影响不仅仅局限于生产力的提升,它还深刻地触及到社会......
  • 任务分配与信息共享:跨职能团队协作的利器
    一、跨职能团队协作的挑战沟通障碍与信息不对称跨职能团队通常由来自不同部门的成员组成,各个部门之间存在语言、目标和工作方式上的差异。例如,研发团队更加注重技术细节和功能实现,而市场和销售团队则关注产品的市场定位、推广策略和客户需求。这种背景差异往往会导致沟通中的误......
  • 动态内存管理,如何实现内存的高效分配?良心制作,属实不易!
    目录前引与之相关的4个重要函数malloc—申请所需内存对开辟空间有效性的判断free内存释放calloc—申请所需内存malloc与calloc的区别realloc调整动态空间realloc调整空间的2种情况常见的动态内存错误(重点)动态开辟必须流程内存大概分配图几个经典的笔试题 ......
  • 高性能、零内存分配的Go日志库--Zerolog
    简介Zerolog是一个高性能、零内存分配的Go日志库。它为不需要垃圾回收的延迟敏感型应用程序提供结构化日志记录功能。您可以以完全零分配的方式使用,这样在初始化记录器对象后,堆上不会再分配其他对象,从而防止触发垃圾回收。Zerolog包提供了一个专用于JSON输出的快速而简......
  • 基于SpringBoot+Vue在线项目管理与任务分配中的应用的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联......