首页 > 其他分享 >[ABC373E] How to Win the Election

[ABC373E] How to Win the Election

时间:2024-10-18 15:13:41浏览次数:1  
标签:node 200005 int ABC373E How Election Win

[ABC373E] How to Win the Election

思路

比较难调的二分。

将 \(A\) 数组排序,很容易想到对于每个 \(i\) 二分 \(X\)。检查 \(X\) 是否成立可以贪心。一开始 \(A_j>A_i+X\) 的人要先算进满足人数,剩下的人可以二分,对于第 \(x\sim y\) 人要满足 \(A_x,A_{x+1}\cdots A_y>A_i+X\) 所需的最小票数即为 \((y-x+1)\times(A_i+X+1)-\sum_{z=x}^y A_z\),可以前缀和优化,最后判断满足人数是否 \(\le M\) 即可。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,c[200005],ans[200005],b[200005];
struct node{
	int x,id;
}a[200005];
bool cmp(node x,node y){
	return x.x<y.x;
}
bool check(int x,int md){
	int ls=lower_bound(b+1,b+1+n,a[x].x+md+1)-b;
	int sy=m-(n-ls+1),syp=k-md;//sy为剩下的人,syp为剩下的票
	//减去本身大于x获得的票数的人
	if(sy<=0) return 0;
	int l=x+1,r=ls,ANS=0,mid;
	while(l<=r){
		mid=(l+r)/2;
		if((ls-mid)*(a[x].x+md+1)-(c[ls-1]-c[mid-1])<=syp)
			r=mid-1,ANS=mid;
		else
			l=mid+1;
	}
	if(ANS!=0)
		sy-=(ls-ANS),syp-=(ls-ANS)*(a[x].x+md+1)-(c[ls-1]-c[ANS-1]);
	else
		return 1;
	if(sy<=0) return 0;
	l=1,r=x-1,mid,ANS=x;
	while(l<=r){
		mid=(l+r)/2;
		if((x-mid)*(a[x].x+md+1)-(c[x-1]-c[mid-1])<=syp)
			r=mid-1,ANS=mid;
		else
			l=mid+1;
	}
	sy-=(x-ANS);
	if(sy<=0) return 0;
	//以i为分界线分两段二分
	return 1;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i].x,k-=a[i].x,a[i].id=i;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++)
		c[i]+=a[i].x,b[i]=a[i].x;
	for(int i=1;i<=n;i++)
		c[i]+=c[i-1];//处理前缀和
	for(int i=n;i>=1;i--){
		int l=0,r=k,mid,ANS=-1;
		while(l<=r){//二分额外获得的票
			mid=(l+r)/2;
			if(check(i,mid))
				r=mid-1,ANS=mid;
			else
				l=mid+1;
		}
		ans[a[i].id]=ANS;
	}
	for(int i=1;i<=n;i++)
		cout<<ans[i]<<" ";
	return 0;
}

标签:node,200005,int,ABC373E,How,Election,Win
From: https://www.cnblogs.com/WuMin4/p/18474332

相关文章

  • c# winform在线升级clickonce
     说明:在线升级前提1,一个可以访问在线的地址,2,发布前要在项目属性发布里配置好相关设置一,可以在IIS上布署一个可以访问的地址 二,发布前配置  应用程序文件项目下的相关文件右键属性,生成操作选择内容才会在发布后都生成出来。  系统必备组件 选择你的程序......
  • Windows自带的录屏神器,你竟然还不知道?
    咱们现在可是活在数字时代,录屏工具简直就是工作和娱乐的得力助手。不管是教别人怎么做事,展示你的PPT,还是录下你玩游戏的高光时刻,都离不开录屏。你可能没注意到,Windows系统自己就有好几个超实用的录屏功能,不用额外下载别的软件,就能搞定大部分录屏需求。这篇文章就给你聊聊window......
  • win10玩游戏找不到d3dx9_43?多种方法解决d3dx9_43丢失问题
    在Win10系统下玩游戏时,不少玩家会遇到找不到d3dx9_43的情况。这个问题会对游戏运行和电脑系统稳定性产生重大影响。如果这个文件缺失,游戏将无法正常启动或运行。玩家可能会看到“无法启动此程序,丢失d3dx9_43.dll”等错误提示。还可能会导致电脑系统的稳定性下降。一、......
  • 统信uos v20国产信创系统运行Windows的exe程序-后续
    本次尝试使用wine软件来进行exe程序的安装,因为第一次使用迁移助手来做,发现每次都要重新安装组件,要等待很长时间,不适合实时调试,所以采用了当前这种方式。1、通过应用商店安装wine软件,我这边版本是:4.1.0.02、执行命令开启串口权限给指定用户sudousermod-a-Gdialoutlenov......
  • DevExpress WinForms中文教程:Data Grid - 如何为网格绑定ADO. NET数据
    在本教程中,您将学习如何做到以下几点:在一个WinForms项目中创建并配置ADO.NET数据源将DevExpressWinForms数据网格绑定到数据源。将更改发布到数据库。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能......
  • MySQL数据库在Windows环境的配置
      本文介绍在Windows电脑中,下载、部署MySQL数据库的方法。  MySQL数据库可以说是最为常用的数据库之一了,在GIS领域中其也经常被用到。之前我们介绍过Redis、PostgreSQL、InfluxDB等多种数据库在Windows电脑中的下载、安装与运行方法,这里就再介绍一下MySQL数据库的配置......
  • 适用于 Windows 10 / 11 的 5 个最佳免费 PDF 转 Word 转换器
     PDF转Word转换器PDF文件是共享文档的首选格式,但是,此类文件存在限制,因此难以修改或编辑。因此,您可能会发现自己正在寻找一种将PDF文件转换为Word或其他可编辑格式的方法。市面上有许多不同的PDF转换器,每一种都提供略有不同的功能。本文将介绍您可能需要PDF转换......
  • windows安装cuda与cudnn
    目录cuda安装前期准备查看电脑支持的cuda版方式一 方式二安装与配置官网下载安装包安装 安装检验环境变量检查(可选)卸载cudnn安装安装包下载配置 环境变量配置安装检验 ​编辑cuda安装前期准备查看电脑支持的cuda版方式一 按快捷键win+R输入“cmd......
  • Winform控件基础与进阶----DataGridView
    Winform控件基础之封装一个通用的DataGridView操作类1、创建Winform项目2、创建公共控件操作文件夹3、主界面1、控件布局2、提取通用方法3、静态方法类实现4、其他工具类实现1、JsonHelper工具类实现2、TxtOperateHelper工具类实现5、数据模型实现1、创建表结构模型2......
  • vscode中每次push都需要输入账号密码,添加windows凭据之后还是没用
    项目场景:练习使用git进行多人开发问题描述vscode中每次push都需要输入账号密码,添加windows凭据之后还是没用原因分析:https://blog.csdn.net/weixin_44180579/article/details/136192735?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522CF93414C-AE93-419C......