洛谷 P6851 onu (贪心,模拟)

题意:C和D打牌,每张牌有花色和点数,小D刚开始的分数为\(v\),不管输还是赢,只要小D出了牌(花色必须相同),就能得到那张牌点数的分数,若是赢了(点数不小于D的牌),他可以另外加\(c\)分,输了就要扣\(c\)分,现在D知道了C的出牌情况,问他最多能拿多少分,并输出出牌情况.
题解:首先,假如他两的牌花色不同,那么D一定打不出牌,只能白白\(-=c\),否则我们要尽可能的出多的牌,并且要赢得多,贪心策略是,用D的最大的牌去打掉C最大的牌,如果C同种颜色最小的牌都比D最大的大,那么只能随便打一张骗一点分并且把C的最大的牌消耗掉,实现起来挺复杂的,具体看代码吧.
代码:
struct misaka{
int col;
int val;
int id;
bool operator < (const misaka &mikoto) const{
return val<mikoto.val;
}
bool operator > (const misaka &mikoto) const{
return val>mikoto.val;
}
}a[N],b[N]; int n,m,c;
ll v;
multiset<misaka> V[N];
int ans[N]; int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m>>c>>v;
for(int i=1;i<=n;++i){
cin>>a[i].col>>a[i].val;
a[i].val=-a[i].val; //存负数方便我们后面进行二分查找
a[i].id=i;
}
for(int i=1;i<=m;++i){
ans[i]=-1;
cin>>b[i].col>>b[i].val;
b[i].val=-b[i].val; //存负数方便我们后面进行二分查找
b[i].id=i;
}
sort(a+1,a+1+n);
for(int i=1;i<=m;++i){
V[b[i].col].insert(b[i]); //记录小C每种颜色的点数,set会对点数自动排序
}
for(int i=1;i<=n;++i){
if(V[a[i].col].empty()) continue;
v-=a[i].val;
auto p=V[a[i].col].lower_bound(a[i]); //因为全是负数,找小C当前颜色牌中小于小D的牌
if(p==V[a[i].col].end()){ //小D最大的牌打不过小C最小的牌
v-=c;
p=V[a[i].col].begin(); //随便出一张
}
else v+=c;
//auto t=*p;
ans[p->id]=a[i].id; //记录ans
V[a[i].col].erase(p); //弹出小C的一张牌
}
for(int i=1;i<=m;++i){
if(ans[i]==-1) v-=c;
}
cout<<v<<endl;
for(int i=1;i<=m;++i){
cout<<ans[i]<<endl;
} return 0;
}
洛谷 P6851 onu (贪心,模拟)的更多相关文章
- 洛谷 P3049 Landscaping ( 贪心 || DP)
题意 : 有n块土地,每块有A[i]泥土,现把其改造成B[i]泥土,有3种操作:(1)花费X向任意土地增加1泥土:(2)花费Y向任意土地减少1泥土:(3)花费Z*|i-j|把土地i的1泥土运到土地j. ...
- 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...
- 洛谷 P6851 【onu】贪心
题目描述 题目传送门 分析 因为小 \(D\) 打出的牌与小 \(C\) 打出的牌花色必须相同,所以我们需要按照花色分类讨论 对于某一种花色 如果小 \(C\) 没有这种花色的牌但是小 \(D\) 有 ...
- AC日记——神奇的幻方 洛谷 P2615(大模拟)
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 2018.11.02 洛谷P3952 时间复杂度(模拟)
传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...
- 【洛谷】【堆+模拟】P2278 操作系统
from HNOI2003 [题目描述:] 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则 ...
- 洛谷 P2689 东南西北【模拟/搜索】
题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出“-1”. 输入输出格式 输入格式: 第一行 ...
- 洛谷P2831 愤怒的小鸟——贪心?状压DP
题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一 ...
- 洛谷 P1498 南蛮图腾 —— 模拟
题目:https://www.luogu.org/problemnew/show/P1498 大约一年前该做的题...现在来填一下坑: 然而不怎么会模拟!还滚去看TJ了: 就是翻倍复制: \ 这个符号 ...
随机推荐
- MongoDB Sharding(一) -- 分片的概念
(一)分片的由来随着系统的业务量越来越大,业务系统往往会出现这样一些特点: 高吞吐量 高并发 超大规模的数据量 高并发的业务可能会耗尽服务器的CPU,高吞吐量.超大规模的数据量也会带来内存.磁盘的压力 ...
- Docker学习笔记之创建Ubuntu基础镜像
在创建基础镜像之前需要安装Bootstrap工具debootstrap,所以执行命令: sudo apt install debootstrap 软件安装完成后就可以使用debootstrap工具下载 ...
- 【Docker】CentOS7 上无网络情况下安装
自建虚拟机,但是连接不上网络,只能通过下载rpm包进行安装docker 环境:CentOS 7.3.1611 x64 rpm镜像下载地址用的阿里的https://mirrors.aliyun.com/ ...
- 【Linux】ssh反映特别慢,但是网络没有问题的时怎么办
用crt连接服务器的时候,感觉很久才有反映,大约持续2秒以上,这种情况下,是解析的问题 这里有一个方法可以优化ssh cd /etc/ssh/ cp sshd_config sshd_config.b ...
- 利用Numpy求解投资内部收益率IRR
一. 内部收益率和净现值 内部收益率(Internal Rate of Return, IRR)其实要和净现值(Net Present Value, NPV)结合起来讲.净现值指的是某个投资项目给公司 ...
- 单元测试:单元测试中的mock
公司要求提升单元测试的质量,提高代码的分支覆盖率和行覆盖率,安排我研究单元测试,指定方案分享并在开发部普及开.整理完资料后,同步一下到博客. 单元测试中的mock的目的 mock的主要目的是让单元测试 ...
- 物理STANDBY库创建还原点(打开为read write后再变回主库)
开启STANDBY库为READ WRITE 1.取消主库传送归档 SQL> alter system set log_archive_dest_state_2=defer; 2.取消备库应用日志 ...
- Goby资产扫描工具安装及报错处理
官网: https://cn.gobies.org/index.html 产品介绍: 帮企业梳理资产暴露攻击面,新一代网络安全技术,通过为目标建立完整的资产数据库,实现快速的安全应急. 已有功能: 扫 ...
- linux7下修改主机名的方式
在基于linux发行版的众多linux kernel 3.0以上,包括rhel7,centos7等提供多种修改linux主机名的方式 1.通过编辑/etc/hostname文件 2.命令hostnam ...
- 缓存淘汰算法 LRU 和 LFU
LRU (Least Recently Used), 即最近最少使用用算法,是一种常见的 Cache 页面置换算法,有利于提高 Cache 命中率. LRU 的算法思想:对于每个页面,记录该页面自上一 ...