Codeforces 1251E Voting
E2. Voting (Hard Version)
题意: 有n个人, 你想让他们都给你投票. 你可以选择花费pi收买第i个人, 或者如果有mi个人已经给你投票了, 那么第i个人会自动给你投票.
不妨把题目等价为, 给n个人排一个先后投票的顺序, 假设在这个顺序中, 第k个投票的人, 它的mi不超过k-1, 那么这个人就不需要花钱收买, 否则就需要花钱收买.
那么我们依次考虑第1,2,3,....n个投票的位置让哪个人来投票. 可以发现, 只要我们让"不需要花钱收买的人省下的钱"最大化, 就相当于让代价最小化了.
对于每个位置, 最优化这个位置的收益. 而且越靠前的位置越无用, 所以我们从前往后依次考虑每个位置, 最大化每个位置的收益, 也就是在每个位置考虑能在这个位置避免花钱收买的人, 把其中花钱最多的人放到这个位置. 借助一个堆来实现即可.
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long i64;
const int maxn = 200005;
struct vote{
int m, p;
bool operator < (const vote &b)const{
return m < b.m;
}
}V[maxn];
void work(){
int n;scanf("%d", &n);
for(int i=1;i<=n;++i){
scanf("%d%d", &V[i].m, &V[i].p);
}
sort(V+1, V+n+1);
priority_queue<int> q;
i64 ans = 0;
int pt = 1;
for(int i=0;i<n;++i){
while(pt <= n && V[pt].m<=i){
ans += V[pt].p;
q.push(V[pt].p);
++pt;
}
if(!q.empty()){
ans -= q.top();
q.pop();
}
}
printf("%lld\n", ans);
}
int main(){
int t;scanf("%d", &t);
while(t--)work();
return 0;
}
Codeforces 1251E Voting的更多相关文章
- Codeforces 749C. Voting 模拟题
C. Voting time limit per test: 1 second memory limit per test: 256 megabytes input: standard input o ...
- CodeForces - 749C Voting
C. Voting time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- codeforces#1251E2. Voting (Hard Version)(贪心)
题目链接: http://codeforces.com/contest/1251/problem/E2 题意: 主角需要获得n个人的投票 有两种方式让某个人投票 1,已经投票的人数大于m 2,花p枚硬 ...
- Voting CodeForces - 749C
有点意思的题 Voting CodeForces - 749C 题意:有n个人投票,每次按照第1个人~第n个人的顺序发言,如果到某个人发言时他已经被禁止发言就跳过,每个人发言时可以禁止另一个人发言或什 ...
- Codeforces 749C:Voting(暴力模拟)
http://codeforces.com/problemset/problem/749/C 题意:有n个人投票,分为 D 和 R 两派,从1~n的顺序投票,轮到某人投票的时候,他可以将对方的一个人K ...
- codeforces 637A A. Voting for Photos(水题)
题目链接: A. Voting for Photos time limit per test 1 second memory limit per test 256 megabytes input st ...
- Codeforces Round #388 (Div. 2) C. Voting
题意:有n个人,每个人要么是属于D派要么就是R派的.从编号1开始按顺序,每个人都有一次机会可以剔除其他任何一个人(被剔除的人就不在序列中也就失去了剔除其他人的机会了):当轮完一遍后就再次从头从仅存的人 ...
- Voting CodeForces - 749C (set,模拟)
大意: n个人, 两个党派, 轮流投票, 两种操作(1)ban掉一个人 (2)投票, 每轮一个未被ban的人可以进行一次操作(1)或操作(2), 求最终哪个党派得票最多. 显然先ban人会更优, 所以 ...
- Codeforces 158 D
题目链接 :http://codeforces.com/contest/158/problem/D D. Ice Sculptures time limit per test 3 seconds me ...
随机推荐
- 记事本 该文件含有unicode格式的字符 点确定就变乱码了,notePad++,UltraEditor等编辑器打开也变乱码?
--问题 之前一直都是好的 今天电脑打开,发现电脑所有的TXT记事本,点开来全是乱码,甚至下过来的TXT,或者自己新建的TXT,打上中文字,点保存会弹出 该文件含有unicode格式的字符什么什么的, ...
- Python pip版本升级
pip版本升级命令: python -m pip install --upgrade pip 如果报错代码如下: (venv) C:\Users\ssdy\PycharmProjects\untitl ...
- day10——动态参数、函数注释、名称空间、函数的嵌套、global及nonlocal
day10 三元运算符: 变量 = 条件成立的结果 条件判断 条件不成立的结果 补充: # lst = [12,23,3,4,5,6] # def func(*args): # print(*args ...
- GoLang的概述
GoLang的概述 1.什么是程序 完成某个功能的指令的集合 2.Go语言的诞生小故事 2.1. 开发团队-三个大牛 2.2.Google创造Golang的原因 2.3.Golang 的发展历程 20 ...
- 部署.Net Core APi+Vue 到 linux centos 服务器(一)
部署.Net Core APi+Vue 到 linux centos 服务器(一) 前言:项目采用的是 .net core 作为接口,vue作为前端. 此时需要把整个项目架设到linux centos ...
- golang ---cron
package main import ( l4g "github.com/alecthomas/log4go" "github.com/robfig/cron" ...
- AutoFac的简单使用教程
Autofac可以对代码进行依赖注入,实现控制反转.以下是本菜鸟在初次入门时的代码配置,其源码,内部原理都还有待日后研究.目前也只是仅仅做到了能够使项目正常使用而已. 跟我一样刚刚入门的菜鸟朋友们可以 ...
- IPv4如何转换为IPv6?
ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv6相关计 ...
- Linux排查PHP-FPM进程过量常用命令
命令如下: 查看每个PHP-FPM进程的内存占用:ps -ylC php-fpm –sort:rss 查看消耗内存最多的前 40 个进程:ps auxw|head -1;ps auxw|sort -r ...
- 机智云连接esp8266--远程控制风扇转速
概述 下面我们使用esp8266开发板和机智云云端,实现如何将一个USB风扇,改造成可以远程控制转速的智能风扇. 1.准备工作 硬件: (1)esp8266开发板 (2)USB线 (3)USB风扇 软 ...