(简单贪心)CodeForces 994B-Knights of a Polygonal Table

2024-03-08 12:58

本文主要是介绍(简单贪心)CodeForces 994B-Knights of a Polygonal Table,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • (简单贪心)CodeForces 994B-Knights of a Polygonal Table

 


  • 题目链接:B. Knights of a Polygonal Table

  • 思路:

题目大意是有n个杀手,每个杀手最多能杀k个Power值比他小的人,给出n个杀手各自的Power值和Money数,问每个杀手最多能获得多少Money

定义一个结构体,内含杀手的原始索引(排序会打乱输入顺序,先记录),Power及Money,自定义对杀手Power值进行升序排序,排序后每个杀手能可能杀的人只可能位于他前面,用优先队列对前面的杀手进行入队,在k和索引范围内弹队出金钱最多的人,杀手最大金钱数等于杀的人钱数加上自身钱数

一开始我全部用sort,会超时,所以改用了优先队列,但优先队列在弹出金钱数最多杀手时需要同时出队,但是这些杀手在后面仍有可能被杀,所以用一个Temp优先队列先存出队的杀手,过后再入队。

  • 代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
#define MAX_SIZE 100005
struct Knight{int index;long long Power;long long Money;bool operator<(Knight b)const    //不加const系统报错{return this->Money<b.Money;}
};Knight Member[MAX_SIZE];
long long Res[MAX_SIZE];   //储存杀手最大金钱
bool Mycmp_1(Knight a,Knight b)   //对能力值升序
{return a.Power<b.Power;
}int main()
{int n,k;while(cin>>n>>k){priority_queue<Knight> Kill_List;priority_queue<Knight>Temp_que;   //暂存出队杀手for(int i=0;i<n;i++){scanf("%lld",&Member[i].Power);Member[i].index=i;    //记录下原始索引}for(int i=0;i<n;i++)scanf("%lld",&Member[i].Money);sort(Member,Member+n,Mycmp_1);   //先对能力值升序Kill_List.push(Member[0]);   for(int i=0;i<n;i++){Res[Member[i].index]=Member[i].Money;   //杀手自己有的钱数if(i==0)continue;for(int j=0;j<k&&j<=i-1;j++){Temp_que.push(Kill_List.top());   //保存tempRes[Member[i].index]+=Kill_List.top().Money;  //杀比自己弱的人中钱多的Kill_List.pop();  //出队}while(!Temp_que.empty()){Kill_List.push(Temp_que.top());   将temp重新回到Kill_ListTemp_que.pop();}Kill_List.push(Member[i]);   //已经完成的杀手入队}for(int i=0;i<n;i++)cout<<Res[i]<<" ";cout<<endl;}
}

 

这篇关于(简单贪心)CodeForces 994B-Knights of a Polygonal Table的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787152

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构