「CCO 2017」专业网络
Kevin 正在一个社区中开发他的专业网络。不幸的是,他是个外地人,还不认识社区中的任何人。但是他可以与 N 个人建立朋友关系 。
然而,社区里没几个人想与一个外地人交朋友。Kevin 想交朋友的 N 个人都有类似但不同的与外地人交友的准则。在 Kevin 已经直接认识了社区中的 Ai 个人后,第 i 个人就愿意与 Kevin 交朋友了,否则 Kevin 就要付出 Bi 的代价与他成为朋友。
你的任务是,使 Kevin 与这 N 个人都交上朋友,并且最小化他付出的代价。
第一行包含整数 N。接下来的 N 行每行包含两个整数 Ai 和 Bi。
输出一行一个整数表示 Kevin 付出的最小代价。
题解
首先把所有的人按Ai排序的话,这N个人会形成一条折线,

如果一个一个人地解决掉(以强大的人脉折服他或收买他),那你的人脉的增长会成一条直线,

那么一个人 i 若在这个序列的位置为 i' ,且 i' > Ai,则解决这个人是不用花钱的,

这就很像一道叫 “不守交规”的贪心基础题,
描述
近些年来,生活水平越来越好,私家车也成了很多家庭必备之物。但某些司机总是不守交规,罚单也是接踵而至。
有一位不遵守交规的司机,在同一天收到了n条违章罚单短信(1≤n≤100),每条罚单短信中有两个内容,一:交罚款的最后剩余时间ti;二:过期未交的滞纳金mi(1≤ti,mi≤1000),假设不管过期多少天,滞纳金数量不会改变,而且,这位司机很忙,每天最多只能处理一张罚单,那么,这位司机应该按怎样的处理违章短信的顺序,才能使滞纳金总和最少?
输入共n+1行
第1行:收到短信数n
后n行:每行分别两个数,最后期限ti和过期滞纳金mi,用空格隔开输出
最少的滞纳金总和
样例输入
4
1 50
1 100
2 60
3 60样例输出
50
解题思路
首先我们能够想到按照滞纳金的从大到小进行排序,但是真的是按照时间顺序处理这些从大到小的滞纳金吗?其实不是的,我们最优贪心思想应该是按照滞纳金的按照滞纳金的从大到小进行排序,越大的滞纳金能够拖到最后一天处理就最后一天处理;如果最后一天已经处理过以其他的滞纳金,则就从这一天倒着往前开始找,看看那一天没有处理过滞纳金,就在这一天处理该滞纳金;如果没有找到,则说明一定要缴纳此滞纳金。
——————————————————————————————————————————
原文链接:https://blog.csdn.net/qq_37220238/article/details/80013402
一样的思路,把人按Bi从大到小排,然后在 [Ai + 1,n]中找一个最靠左的位置放,位置被占完了就只能拿钱买他。
只不过得加一个log优化
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<map>
#include<cmath>
#include<iostream>
#define LL long long
using namespace std;
int read() {
int f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s == '-')f = -1;s = getchar();}
while(s >= '0' && s <= '9') {x = x * 10 + s - '0';s = getchar();}
return x * f;
}
LL max(LL a,LL b) {
return a > b ? a : b;
}
struct it{
LL nm,co;
}a[200005];
bool operator < (it a,it b) {
if(a.co != b.co) return a.co > b.co;
else return a.nm < b.nm;
}
LL n,m,i,j,k,s,o;
int tre[800005];
int aa[200005];
int bing(int x,int y) {
if(aa[x] < aa[y]) return x;
if(aa[x] > aa[y]) return y;
return x < y ? x : y;
}
void maketree(int n) {
m = 1;
while(m < n + 2) m <<= 1;
}
void F5(int x) {
int s = m + x;
tre[s] = x;
s /= 2;
while(s) {
tre[s] = bing(tre[s * 2],tre[s * 2 + 1]);
s /= 2;
}
return ;
}
int findt(int l,int r) {
int s = m + l - 1,t = m + r + 1;
int ans = 0;
while(s || t) {
if(s / 2 != t / 2) {
if(s % 2 == 0) {
ans = bing(ans,tre[s + 1]);
}
if(t % 2) {
ans = bing(ans,tre[t - 1]);
}
}
else break;
s /= 2;t /= 2;
}
return ans;
}
int main() {
n = read();
maketree(n + 1);
for(int i = 1;i <= n;i ++) {
a[i].nm = read();
a[i].co = read();
}
sort(a + 1,a + 1 + n);a[0].co = 0x7f7f7f7f;
for(int i = 1;i <= n + 1;i ++) F5(i);aa[0] = 2;
LL ans = 0;
for(int i = 1;i <= n;i ++) {
int j = a[i].nm + 1,k;
// cout<<j<<endl;
if((k = findt(j,n + 1)) <= n) {
aa[k] = 1;
F5(k);
}
else ans += a[i].co;
}
printf("%lld\n",ans);
return 0;
}
「CCO 2017」专业网络的更多相关文章
- 「THUSCH 2017」大魔法师 解题报告
「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...
- 「THUWC 2017」随机二分图
「THUWC 2017」随机二分图 解题思路 : 首先有一个 \(40pts\) 的做法: 前 \(20pts\) 暴力枚举最终的匹配是怎样的,check一下计算方案数,后 \(20pts\) 令 \ ...
- LOJ 2288「THUWC 2017」大葱的神力
LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \ ...
- 「NOIP 2017」列队
题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...
- @loj - 2977@ 「THUSCH 2017」巧克力
目录 @description@ @solution@ @accepted code@ @details@ @description@ 「人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道.」 明 ...
- 「LOJ 2289」「THUWC 2017」在美妙的数学王国中畅游——LCT&泰勒展开
题目大意: 传送门 给一个动态树,每个节点上维护一个函数为$f(x)=sin(ax+b)$.$f(x)=e^{ax+b}$.$f(x)=ax+b$中的一个. 支持删边连边,修改节点上函数的操作. 每次 ...
- LOJ #2978「THUSCH 2017」杜老师
听说LOJ传了THUSC题赶紧上去看一波 随便点了一题都不会做想了好久才会写暴力爆了一发过了... LOJ #2978 题意 $ T$次询问,每次询问$ L,R$,问有多少种选取区间中数的方案使得选出 ...
- LOJ 2409「THUPC 2017」小 L 的计算题 / Sum
思路 和玩游戏一题类似 定义\(A_k(x)=\sum_{i=0}^\infty a_k^ix^i=\frac{1}{1-a_kx}\) 用\(\ln 'x\)代替\(\frac{1}{x}\), 所 ...
- 「THUWC 2017」在美妙的数学王国中畅游
这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.
随机推荐
- 一些有趣的B+树优化实验
作为目前数据库引擎的两种主要数据结构,LSM-tree和B+-tree在业界已经有非常广泛的研究.相比B+-tree,LSM-tree牺牲一定的读性能以换取更小的写放大以及更低的存储成本,但这必须建立 ...
- c++ 关于二分的STL 详解
一.解释 以前遇到二分的题目都是手动实现二分,不得不说错误比较多,关于返回值,关于区间的左闭右开等很容易出错,最近做题发现直接使用STL中的二分函数方便快捷还不会出错,不过对于没有接触过的同学,二分函 ...
- midway的使用教程
一.写在前面 先说下本文的背景,这是一道笔者遇到的Node后端面试题,遂记录下,通过本文的阅读,你将对楼下知识点有所了解: midway项目的创建与使用 typescript在Node项目中的应用 如 ...
- MCDF实验2
目录 接口的使用 仿真的结束 类的例化和类的成员 接口的使用 问题1.1:可以看到之前的实验 channel initiator 发送的数据例如 valid 和 data 与时钟 clk 均在同 ...
- 不忍了,快速下载Visual Studio Code
更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月2日. 奇怪的原因 因为一些众所周知的原因,在国内下载Visual Studio Code的速度比较慢,所以我们需要一些方法来加快 ...
- Linux shell脚本基础
程序的组成: 程序:算法+数据结构 数据:程序处理的目标 数据结构:相互之间存在一种或多种特定关系的数据元素的集合 算法:处理数据的方式 编程风格: 面向对象:把所有的操作都转化为对象的方式. 面向过 ...
- Python-基础知识汇集
1.列表 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可 代码理解:列表 ...
- HashMap设计原理与实现(下篇)200行带你写自己的HashMap!!!
HashMap设计原理与实现(下篇)200行带你写自己的HashMap!!! 我们在上篇文章哈希表的设计原理当中已经大体说明了哈希表的实现原理,在这篇文章当中我们将自己动手实现我们自己的HashMap ...
- docker数据卷技术
数据卷技术 数据卷手动挂载 数据卷容器 part1:数据卷挂载方式 数据卷手动挂载 -v 主机目录:容器目录 #核心参数 #示例 docker run -it --name=centos_test - ...
- Taurus.MVC 如何升级并运行在NET6、NET7
前言: 之前计划帮某公司架构一个从WPF转向Web的低代码的开发平台,并构思为Taurus.MVC 新增微服务的基础功能模块,提供便捷的微服务开发方式,因中途合作中止,代码开发部分后续再上. 最近看到 ...