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」专业网络的更多相关文章

  1. 「THUSCH 2017」大魔法师 解题报告

    「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...

  2. 「THUWC 2017」随机二分图

    「THUWC 2017」随机二分图 解题思路 : 首先有一个 \(40pts\) 的做法: 前 \(20pts\) 暴力枚举最终的匹配是怎样的,check一下计算方案数,后 \(20pts\) 令 \ ...

  3. LOJ 2288「THUWC 2017」大葱的神力

    LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \ ...

  4. 「NOIP 2017」列队

    题目大意:给定一个 $n times m$ 的方阵,初始时第 $i$ 行第 $j$ 列的人的编号为 $(i-1) times m + j$,$q$ 次给出 $x,y$,让第 $x$ 行 $y$ 列的人 ...

  5. @loj - 2977@ 「THUSCH 2017」巧克力

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 「人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道.」 明 ...

  6. 「LOJ 2289」「THUWC 2017」在美妙的数学王国中畅游——LCT&泰勒展开

    题目大意: 传送门 给一个动态树,每个节点上维护一个函数为$f(x)=sin(ax+b)$.$f(x)=e^{ax+b}$.$f(x)=ax+b$中的一个. 支持删边连边,修改节点上函数的操作. 每次 ...

  7. LOJ #2978「THUSCH 2017」杜老师

    听说LOJ传了THUSC题赶紧上去看一波 随便点了一题都不会做想了好久才会写暴力爆了一发过了... LOJ #2978 题意 $ T$次询问,每次询问$ L,R$,问有多少种选取区间中数的方案使得选出 ...

  8. 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}\), 所 ...

  9. 「THUWC 2017」在美妙的数学王国中畅游

    这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.

随机推荐

  1. Linux系统安装ActiveMQ

    下载安装包 https://activemq.apache.org/components/classic/download/ 上传至服务器并解压 [root@localhost activemq]# ...

  2. 开发工具-在线生成GUID

    更新记录 2022年6月11日 记录开始. https://www.toolbaba.cn/d/dev_guid http://tool.pfan.cn/guidgen https://www.iam ...

  3. Redis实现延迟队列的正确姿势

    在之前探讨延时队列的文章中我们提到了 redisson delayqueue 使用 redis 的有序集合结构实现延时队列,遗憾的是 go 语言社区中并无类似的库.不过问题不大,没有轮子我们自己造. ...

  4. 在VMware Workstation 16上安装Windows7虚拟机以及VMware tools安装失败解决方法

    安装VMware Workstation 16 搜素"VMware Workstation下载" 下载 VMware Workstation Pro 下载Windows7系统镜像 ...

  5. NC50528 滑动窗口

    NC50528 滑动窗口 题目 题目描述 给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位,如下图: 你的任务是找出窗体在各个位置时的最大值 ...

  6. C语言中限定符的作用

    C语言中常用的一般包括const.static.extern.register和volatile这几个.这些是C语言标准中规定的关键词,所有的编译器都必须支持这些关键词,它们的作用如下: 1.cons ...

  7. C#实现FFT(递归法)

    C#实现FFT(递归法) 1. C#实现复数类 我们在进行信号分析的时候,难免会使用到复数.但是遗憾的是,C#没有自带的复数类,以下提供了一种复数类的构建方法. 复数相比于实数,可以理解为一个二维数, ...

  8. c语言编译器介绍

    目录 一.IDE(集成开发环境) 1.windows 编译器 2.Mac中使用 二.环境安装 1.windows安装gcc A.进入安装所在目录,找到MinGW. B.找到我的电脑,右键选择属性. C ...

  9. 5-18 Nacos配置中心 | RestTemplate

    配置中心 什么是配置中心 所谓配置中心:将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具 我们可以将部分yml文件的内容保存在配置中心 一个微服务项目有很多子 ...

  10. 啥也不是 -「OI 易犯错误整理」

    原帖出自 Nefelibata,不过他不想维护,所以就交给 STrAduts 了 awa.因为一些不可抗力,帖主转移至 XSC062.申请置顶! 前言 Nefelibata:因为笔者弱到无法形容,因此 ...