【51nod】1494 选举拉票 扫描线+线段树

51nod 1494 选举拉票【贪心】【扫描线】【线段树】2023华为od机试真题【人气最高的店铺】 51nod 1494 选举拉票,华为od机试真题【人气最高的店铺】算法思路 阅读详情

题目传送门

扫描线是什么鬼啊……为什么我好像什么都不会啊QwQ……

Orz sillyf

以上的图片来自sillyf大佬的博客,大佬传送门

把所有的候选人拥有的票数看做一条线段,枚举当前自己拥有的票数为 i ,所有票数大于等于自己的票数的人必须要去py(逃)收买投票的人

如果把当前必须买的部分全买完了票数还是不够,就需要去挑着买的部分选一些便宜的买来,这个可以用权值线段树实现。

附上AC代码:

#include <cstdio>
#include <cctype>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;
const int N=1e5+10;
int n,x,y,num,m,c,t1[N<<2];
vector <int> a[N],b[N];
ll sum,ans,t2[N<<2];

inline char nc(void){
    static char ch[100010],*p1=ch,*p2=ch;
    return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;
}

inline void read(int &a){
    static char c=nc();int f=1;
    for (;!isdigit(c);c=nc()) if (c=='-') f=-1;
    for (a=0;isdigit(c);a=(a<<3)+(a<<1)+c-'0',c=nc());
    return (void)(a*=f);
}

inline bool cmp(int x,int y){return x>y;}

#define lt (k<<1)
#define rt (k<<1|1)
#define mid (l+r>>1)

inline void change(int k,int l,int r,int wz){
    if (l==r) return (void)(++t1[k],t2[k]+=1ll*l);
    if (wz<=mid) change(lt,l,mid,wz);
    else change(rt,mid+1,r,wz);
    return (void)(t1[k]=t1[lt]+t1[rt],t2[k]=t2[lt]+t2[rt]);
}

inline ll query(int k,int l,int r,int w){
    if (l==r) return 1ll*l*w;
    if (w==t1[lt]) return t2[lt];
    if (w<t1[lt]) return query(lt,l,mid,w);
    return t2[lt]+query(rt,mid+1,r,w-t1[lt]);
}

int main(void){
    read(n),m=1;
    for (int i=1; i<=n; ++i){
        read(x),read(y),num=max(num,x);
        if (y==0) continue;
        m=max(m,y),ans+=1ll*y,a[x].push_back(y);
    }
    for (int i=1; i<=num; ++i)
        if (a[i].size()){
            sort(a[i].begin(),a[i].end(),cmp);
            for (int j=0; j<a[i].size(); ++j) b[j+1].push_back(a[i][j]);
        }
    c=n,sum=ans;
    for (int i=1; i<=n; ++i){
        c-=b[i].size();
        for (int j=0; j<b[i].size(); ++j) change(1,1,m,b[i][j]),sum-=1ll*b[i][j];
        ll t=0;
        if (c<=i) t=query(1,1,m,min(i+1-c,n));
        ans=min(ans,sum+t);
    }
    return printf("%lld\n",ans),0;
}
华为OD机试|华为od题库|华为od机考|2025真题目录C++实现|2025C卷B卷 华为OD机试|华为od题库|华为od机考|2025真题目录C++实现|B卷C卷|华为OD机试|华为od题库|华为od机考|2025真题目录C++实现|B卷C卷|华为OD机试|华为od题库|华为od机考|2025真题目录C++实现|B卷C卷|华为OD机试|华为od题库|华为od机考|2025真题目录C++实现|B卷C卷 阅读详情

相关推荐

【选举拉票】

0 ≤ bi ≤ 10^4),表示第 i 个选民选的是第 ai 号候选人,想要让他选择自己就要花 bi 的钱。你是 0 号候选人(所以,如果一个选民选你的话 ai 就是 0,这个时候 bi 也肯定是 0 )。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。第一行有一个整数 n(1 ≤ n ≤ 10^5),表示这个县的选民数目。输出一个整数表示花费的最少的钱。

优快云 1575

51nod 1494 选举拉票 (线段树+扫描线)

1494选举拉票 题目来源:CodeForces 基准时间限制:1秒 空间限制:131072KB 分值:80难度:5级算法题 收藏 关注 现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(...

weixin_30341735的博客 204

华为OD机试 - 人气最高的店铺(JS)

如果选择发放 10元+20元+30元=60元 的补贴来抢2,3.4号店铺的票,总共发放了60元补贴(5号店铺有2票,1号店铺要3票才能胜出)如果选择发放 10元+20元+30元=60元 的补贴来抢2,3,4号店铺的票,总共发放了60元补贴(5号店铺有2票,1号店铺要3票才能胜出)如果选择发放 10元+40元=50元 的补贴来抢2,5号店铺的票,总共发放了50元补贴(抢了5号店铺的票后,现在1号店铺只要2票就能胜出)的换皮题,具体解析请看该博客的。有5个人参与,共5个店铺。有5个人参与,共5个店铺。

m0_46181452的博客 96

[枚举 线段树] 51Nod1494 选举拉票

直接做不太可做,我们可以枚举一个 dd 表示其他人最大值不大于 dd 时的方案数。 这样就好做多了,比 dd 大的部分就一定要全部扣掉。然后如果自己的票数不足 dd ,就需要在剩下的所有票里取最便宜的前几个,需要线段树询问前k小值的加和。#include<cstdio> #include<vector> #include<algorithm> #define Fir first #define Se

Lynstery's blog 578

进阶数据结构——链式前向星

链式前向星是一种进阶的数据结构,主要用于图的存储。我希望大家先看这个视频(蓝色字体点进去) 不然你很难理解的。在图论中,图的存储方式主要有邻接矩阵和邻接表两种。邻接矩阵虽然建图简单方便,但占内存较大,节点数量稍微大点的题目就难以使用(适合稠密图);而邻接表虽然节省空间,但其指针形式难写易错,且vector形式的读取速度较慢,易导致大数据下的超时(TLE)。针对上述问题,链式前向星作为一种折中的方式应运而生。链式前向星本质上是一种静态链表,它将数据以链表形式连接在一起。

ycs66的博客 2137

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4731

51nod 1494 选举拉票【贪心】【扫描线】【线段树】

Description现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。题解直接做很困难,所以我们想到了枚举我的选票数,所有选票数比我多的人的选票都要被我抢到小于我的选票数(一定是从小到大

Sdywolf的博客 681

第四篇:关于python程序打包的问题-找不到fsspec

这个问题困扰了我将近两天的时间一直找不到什么好的办法,甚至打算放弃。主要原因是身边没有可以述说的人,也没有可以请教的人。正在想要放弃的时候找到了解决办法。 打包后运行程序是这样的, 大概意思是找不见fsspec这个依赖,刚接触python说实话对于这些第三方库理解不是很到位,我的理解就是:类似于java程序中的jar包,程序找不见了。可怎么让他找见了,刚开始以为我自己没有安装fsspec,在cmd中进行了安装,结果如下图所示 很明显,已经安装并且安装目录都有,跟着网上的一些解决办法,在打包的时候把这.

weixin_47861710的博客 5865

51nod 1494 选举拉票 | 线段树

51nod1494 选举拉票 题面 现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。 Input 单组测试数据。 第一行有一个整数n (1 ≤ n ≤ 10^5),表示这个县的选民数...

weixin_30556161的博客 165

智能客服系统知识库数据清洗

数据清洗(Data Cleaning)是确保智能客服知识库高效运行的重要环节,主要涉及。| 分类 & 标签优化 | 重新组织 FAQ,创建关键字索引 || 定期更新 | 结合用户反馈,每 1-3 个月优化 |才能提供更优质、正确的回答,提升客户满意度!、Zendesk、Intercom 等)中,: FAQ 或客服回答中可能存在。,会影响 AI 匹配的准确性。是一个持续优化的过程,

z1941563559的博客 2099

i茅台APP加密参数逆向分析:MT-Device-ID与mt-v生成算法

在移动应用安全领域,参数加密是防止API滥用的重要手段。通过对通信协议的逆向分析,可以揭示加密参数的生成原理,这对理解移动应用安全机制具有重要意义。以i茅台APP为例,其关键接口使用了MT-Device-ID和mt-v两个加密参数,前者基于设备硬件信息生成,后者则通过动态签名机制确保请求时效性。这类技术广泛应用于电商、金融等需要高安全性的场景。通过抓包工具和逆向工程手段,可以还原出从设备指纹生成到动态签名的完整技术链条,其中涉及MD5、SHA256等常见哈希算法的应用。掌握这些加密参数的生成逻辑,不仅有助于

weixin_28568819的博客 320

【51NOD1494】选举拉票

题面 现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。1 ≤ n ≤ 10^5,0 ≤ ai ≤ 10^5; 0 ≤ bi ≤ 10^4 分析 选举拉票是否违法? 是...

Ashley_2013的博客 223

TC3XX - MCAL知识点(二十九):FLS MCAL配置及代码实战(英飞凌DFLASH)

FLS驱动程序为DFlash 0的初始化、读取、写入和擦除提供了定义良好的配置和标准服务。除此之外,我们还提供一些非autosar服务示例 Fls_17_Dmu_CompareWordsSync、Fls_17_Dmu_CancelNonEraseJobs、Fls_17_Dmu_VerifyErase,LFls_17_Dmu_VerifySectorErase、Fls_17_Dmu_GetNotifCaller等。用户通过FLS驱动程序获得对底层DFlash0的封装访问。

梦想技术家 2363

选举拉票 51Nod - 1494

现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。 Input 单组测试数据。 第一行有一个整数n (1 ≤ n ≤ 10^5),表示这个县的选民数目。 接下来有n行,每一行有两个整...

jinduo16的博客 291

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。

盼小辉丶的博客 3万+

【WorkBuddy专栏58】腾讯为什么要「自己打自己」——7款AI智能体产品全景对比与「赛马」逻辑深度拆解

【WorkBuddy专栏57】你的左侧空间不是「日任务清单」——工作空间才是 WB 变聪明的核心秘密

AI人人懂 679

51Nod-1494-选举拉票

ACM模版描述题解线段树的题倒是做过一些,但是和扫描线组合的倒是第一次做,以前甚至不知道什么叫做扫描线,做了这个题感觉有那么丢丢感觉了。首先,我们默认要拉所有选民,然后开始减少要拉的选民数。这是中心思想。具体的实现方式是,我们先对每个人的选民进行代价排序,然后扫描出来每个候选人的选民的代价 rankrank,同等 rankrank 的放在一起,你要是问什么是 rankrank 的话,举个最简单的例子

逐梦者 1074

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

线段树专项训练习题集

ACM模版线段树专项训练开始了,网上找了找相关的训练题,但是没有找到好的集锦,也只好作罢,自己根据前辈们的博客整理出来一份习题集吧,想来一下子全部整理出来不如一道道尝试,一道道整理,这样子可以给不同的试题更好的定位,所以,从今天开始,陆陆续续会更新本习题集,希望对大家以及我自己有更好的帮助。更新结点,区间求和HDU 1166 敌兵布阵更新结点,区间最值HDU 1754 I Hate It

逐梦者 2278

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【51nod】1461 稳定桌 扫描线+线段树

题目传送门感觉这题的套路要比“【51nod】1494 选举拉票”那题要简单啊……大雾在这题把每一条腿的长度看成线段,从小到大枚举一个长度ii,长度大于ii的所有腿必须要取,如果剩下的腿中长度为ii的腿的数量没有严格超过半数,那么就取长度小于ii的腿的权值前num−size∗2+1num-size*2+1小。然而我TMD线段树打错了,query(lt,l,mid,w)query(lt,l,mid,w)

Chester King 423

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

2019 CCSU GOLD!!!

线段树专场 更新结点,更新区间,区间求和(平均数)+ 树链剖分51Nod 1199 Money out of Thin Air 更新结点,区间最值,结点查找,区间求和51Nod 1364 最大字典序排列 区间合并 + LCA51Nod 1766 树上的最远点对 更新结点,结点查找,扫描线51Nod 1494 选举拉票 更新结点,区间最值 + dp51Nod 1781 Pinball 更...

weixin_34331102的博客 80

51Nod 1494 选举拉票(权值线段树)

http://www.51nod.com/Challenge/Problem.html#!#problemId=1494 题解 一开始有start个人投自己,num表示当前已经收买了多少人,从大到小枚举自己以i张票当选,那么其他人的票数一定要小于i,拿钱收买他们花费最少的>=i的这部分人,再加上另外要收买的i-start-num个最便宜收买的花费就是当前答案,这里可以对每个人的收买代价建...

weixin_34405925的博客 222

[51nod] 1494 选举拉票 #算法设计策略

1494选举拉票 题目来源:CodeForces基准时间限制:1秒 空间限制:131072KB 分值:80难度:5级算法题 现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等...

weixin_30847865的博客 241

51nod 1494 选举拉票

题意: 1494 选举拉票 1.0 秒 131,072.0 KB 80 分 5级题 现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。 输入 单组测试数据。 第一行有一个整数n (1 ≤ n ≤ 10^5),表示这个县的选民数目。 接下来有n行,每一行有两个整数ai 和 bi (0 ≤ ai ≤

m0_46082460的博客 275

51nod - 1494 选举拉票

现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。 Input 单组测试数据。 第一行有一个整数n(1≤n≤10^5),表示这个县的选民数目。 接下来有n行,每一行有...

brucehb的专栏 635

51nod 1206 1028 1494题解+扫描线模板

51nod 1206 1028 1494题解+扫描线模板          扫描线是线段树在几何方面的经典应用,主要用来解决线段交点个数,矩形面积并和矩形周长并问题。但是扫面线的应用绝不仅限于此,很多看起来跟几何关系不大的问题,往往通过巧妙的转化可以变成扫描线的经典问题,下面就给出三道扫描线的例题。   题目1:https://www.51nod.com/onlineJudge/questi

hit_buxiaoyu的博客 1793
上一篇: 【BZOJ】4337 BJOI2015 树的同构 树hash
下一篇: 【BZOJ】1999 [Noip2007]Core树网的核 树的直径+DFS
Chester_King
博客等级 码龄10年 28粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值