
洛谷 P6851 【onu】贪心
发布日期:2021-05-09 04:44:22
浏览次数:9
分类:博客文章
本文共 1815 字,大约阅读时间需要 6 分钟。
题目描述
分析
因为小 \(D\) 打出的牌与小 \(C\) 打出的牌花色必须相同,所以我们需要按照花色分类讨论
对于某一种花色
如果小 \(C\) 没有这种花色的牌但是小 \(D\) 有,那么小 \(D\) 的牌一定打不出去,直接 \(continue\) 掉
如果小 \(C\) 有这种花色的牌,那么对于小 \(D\) 来说,他肯定想让他赢的次数尽可能多
这其实就是一个田忌赛马的问题
我们把小 \(C\) 和小 \(D\) 的牌按照点数从大到小排序
对于小 \(D\) 的每一张牌,我们在小 \(C\) 小于等于这张牌点数的牌里选择点数最大的那一张与其配对
因为消耗一个点数大的牌肯定更优,这样可以为之后的牌创造更多的获胜机会
因为小 \(D\) 的牌的点数是单调递减的,所以选出的牌的点数也一定是单调递减的
因此,我们可以用一个指针维护
这样到最后小 \(D\) 的牌要么都打光,要么剩下一些
对于剩下的牌,我们随便配对就可以了,因为打出去肯定比不打出去更优
在匹配的过程中如果小 \(C\) 的牌不够用,那么就停止匹配
如果小 \(D\) 的牌打光后小 \(C\) 还剩下牌,那么小 \(D\) 只能选择弃权
代码
#include#include #include #include #define rg registerstruct asd{ int id,val; asd(){} asd(int aa,int bb){ id=aa,val=bb; }};bool cmp(asd aa,asd bb){ return aa.val>bb.val;}const int maxn=1e5+5;std::vector gd[maxn],gc[maxn];int ans[maxn],n,m,maxid;long long c,v;bool vis[maxn];void solve(int id){ if(gc[id].size()==0) return; rg int head=0,js=0; for(rg int i=0;i =gc[id].size()) break; while(1){ if(gc[id][head].val>cs) head++; if(head>=gc[id].size()) break; if(gc[id][head].val<=cs){ ans[gc[id][head].id]=gd[id][i].id; vis[gc[id][head].id]=1; v=v+c+gd[id][i].val; head++,js++; break; } } } for(rg int i=0;i =gd[id].size()){ ans[now]=-1; vis[now]=1; v=v-c; } else { ans[now]=gd[id][js].id; v=v-c+gd[id][js].val; vis[now]=1; js++; } }}int main(){ scanf("%d%d%lld%lld",&n,&m,&c,&v); rg int aa,bb; for(rg int i=1;i<=n;i++){ scanf("%d%d",&aa,&bb); gd[aa].push_back(asd(i,bb)); maxid=std::max(maxid,aa); } for(rg int i=1;i<=m;i++){ scanf("%d%d",&aa,&bb); gc[aa].push_back(asd(i,bb)); maxid=std::max(maxid,aa); } for(rg int i=1;i<=maxid;i++){ std::sort(gd[i].begin(),gd[i].end(),cmp); std::sort(gc[i].begin(),gc[i].end(),cmp); } for(rg int i=1;i<=maxid;i++) solve(i); printf("%lld\n",v); for(rg int i=1;i<=m;i++) printf("%d\n",ans[i]); return 0;}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月07日 23时48分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
算法笔记_075:蓝桥杯练习 最短路(Java)
2019-03-06
Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
2019-03-06
Deepin_使用Python+MySQL创建工作日志记录
2019-03-06
dpdk在虚拟机上出错处理
2019-03-06
Nagios 系统监控基本安装配置过程详解
2019-03-06
Macbook 彻彻底底的卸载MySQL
2019-03-06
ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证
2019-03-06
SSIS 转移数据库和SQL Server对象组件
2019-03-06
SQL Server 列存储索引 第二篇:设计
2019-03-06
ADF 第五篇:转换数据
2019-03-06
Databricks 第4篇:pyspark.sql 分组统计和窗口
2019-03-06
博客系列目录
2019-03-06
部署AlwaysOn第二步:配置AlwaysOn,创建可用性组
2019-03-06
PowerBI开发 第八篇:查询参数
2019-03-06
Execute SQL Task 第二篇:返回结果集
2019-03-06
我眼中的项目经理
2019-03-06
索引调优 第二篇:碎片整理
2019-03-06
SSISDB2:SSIS工程的操作实例
2019-03-06
业务工作流平台设计(七)
2019-03-06
业务工作流平台设计(八)
2019-03-06