【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

Ethercat学习-从站源码生成

移植平台GD32F450,从站芯片AX58100

西澳峰的博客 9224

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 633

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

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

Sdywolf的博客 681

「大模型学习」(14)Long Context之线性插值、NTK-aware、Yarn、LongRoPE

大语言模型长上下文扩展中的位置插值技术 摘要:为解决大语言模型(LLMs)在推理阶段扩展上下文窗口时的位置编码限制,研究人员开发了一系列位置插值技术。这些方法主要针对旋转位置编码(RoPE)机制,通过不同策略调整位置索引以适应超出训练长度的上下文。典型方法包括:基础位置插值(PI)均匀缩放位置索引;NTK-aware插值对不同频率维度差异化处理;NTK-by-parts插值根据波长分段调整;Yarn插值结合温度调节;以及LongRoPE采用非均匀插值策略。这些技术在不修改模型结构的前提下,通过调整位置编码的

qq_43044037的博客 1644

51nod 1494 选举拉票 | 线段树

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

weixin_30556161的博客 165

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 399

Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

axios 用来在前端页面发起一个异步请求,请求之后页面不动,响应回来刷新局部.1.为什么不使用 ajax 呢?官方:在 jQuery 中推荐使用 ajax 技术, Vue 里面不推荐使用 jQuery 框架,因此 Vue 更推荐使用 axiox 异步请求库(axios并不是 vue 官方库).2.axios 特性可以从浏览器中创建 XMLHttpRequests可以从 node.js 中创建 http 请求.支持 Promise API.支持拦截请求和响应.转换请求数据和响应数据.

CYK_byte的博客 1万+

【51NOD1494】选举拉票

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

Ashley_2013的博客 223

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 359

选举拉票 51Nod - 1494

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

jinduo16的博客 291

AI Agent Harness Engineering 开发效率工具:Prompt工程、调试与监控平台

随着AI Agent技术从原型探索走向企业级落地,开发者普遍面临Prompt迭代无版本管控、Agent执行黑盒无法定位错误、上线后无监控导致故障频发、多团队协作效率低下四大核心痛点,据2024年LLMOps行业报告显示,没有配套工具链的Agent开发团队平均迭代周期是有工具链团队的6倍,线上故障率高达23%,平均资源浪费超过60%。

小白菜的博客 426

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 676

51Nod-1494-选举拉票

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

逐梦者 1074

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

线段树专项训练习题集

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

逐梦者 2278

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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、付费专栏及课程。

余额充值