[C++]Knights of a Polygonal Table(骑士的多角桌)
+ 问题描述
+ Link: https://codeforces.com/contest/994/problem/B
+ 描述
Unlike Knights of a Round Table, Knights of a Polygonal Table deprived of nobility and happy to kill each other. But each knight has some power and a knight can kill another knight if and only if his power is greater than the power of victim. However, even such a knight will torment his conscience, so he can kill no more than kk other knights. Also, each knight has some number of coins. After a kill, a knight can pick up all victim's coins.
Now each knight ponders: how many coins he can have if only he kills other knights?
You should answer this question for each knight.
+ 大意
n个骑士, 每个骑士有战力p, 钱c, 每个骑士可以抢战力比他低的钱, 每个骑士最多抢k次, 对每个骑士求出最大钱数。
+ 输入
The first line contains two integers nn and kk (1≤n≤10^5,0≤k≤min(n−1,10))(1≤n≤10^5,0≤k≤min(n−1,10)) — the number of knights and the number kk from the statement.
The second line contains nn integers p1,p2,…,pn (1≤pi≤10^9)(1≤pi≤10^9) — powers of the knights. All pipi are distinct.
The third line contains nn integers c1,c2,…,cn (0≤ci≤10^9)(0≤ci≤10^9) — the number of coins each knight has.
+ 输出
Print nn integers — the maximum number of coins each knight can have it only he kills other knights.
+ 样例
+ 网友思路
1 贪心 +(优先队列)
2 线段树
n ...
+ 代码
【程序结果:用例未完全通过,本博文仅为暂存代码之目的】
/*
B. Knights of a Polygonal Table
url:http://codeforces.com/problemset/problem/994/B
思路:
step0.对骑士进行编号
step1.按照权力值进行顺序排序
step2.分别计算骑士所能杀死的其他骑士及其对应的金币值
step3.按照编号重新恢复原始排序.
*/
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std; typedef struct Knight{
int id;
int power;
int coins;
int expected_coins;
}Knight; bool compare_id(Knight a, Knight b){
if(a.id>b.id)
return false;
else return true;
} bool compare_power(Knight a, Knight b){
if(a.power>b.power)
return false;
else return true;
} int main(){
int n,k,id = 0;
Knight *persons;
scanf("%d %d", &n, &k);
persons = (Knight*)malloc(n*sizeof(Knight));
//printf("\n%d %d", k, n);
for(int i=0;i<n;i++){
persons[i].id = ++id;
scanf("%d", &(persons[i].power));
}
for(int i=0;i<n;i++){
scanf("%d", &(persons[i].coins));
} sort(persons, persons+n, compare_power);//顺序排序:<algorithm> for(int i=0;i<n;i++){//分别计算各骑士能够杀死的人和可以获得的金币最大值
persons[i].expected_coins = persons[i].coins;
for(int j=1;j<=k;j++){
if(i - j >= 0){
persons[i].expected_coins += persons[i - j].coins;
}
}
} sort(persons, persons+n, compare_id);//依照id恢复原始排序 for(int i=0;i<n;i++){
printf("%d%s", persons[i].expected_coins, ((i + 1) != n ?" ":"\n"));//test
//printf("%d %d %d\n", persons[i].power, persons[i].coins, persons[i].expected_coins);//test
} return 0;
}
[C++]Knights of a Polygonal Table(骑士的多角桌)的更多相关文章
- CF994B Knights of a Polygonal Table 第一道 贪心 set/multiset的用法
Knights of a Polygonal Table time limit per test 1 second memory limit per test 256 megabytes input ...
- Knights of a Polygonal Table CodeForces - 994B (贪心)
大意:n个骑士, 每个骑士有战力p, 钱c, 每个骑士可以抢战力比他低的钱, 每个骑士最多抢k次, 对每个骑士求出最大钱数 按战力排序后, 堆维护动态前k大即可 #include <iostre ...
- Codeforces 994B. Knights of a Polygonal Table
解题思路 将骑士按力量从小到大排序,到第i个骑士的时候,前面的i-1个骑士他都可以击败,找出金币最多的k个. 用multiset存金币最多的k个骑士的金币数,如果多余k个,则删除金币数最小的,直到只有 ...
- [CF994B] Knights of a Polygonal Table - 贪心,堆
有 n 个骑士想决战.每个骑士都有能力值(互不相同),且身上带有一些金币.如果骑士 A 的能力值大于骑士 B ,那么骑士 A 就可以杀死骑士 B ,并获得骑士 B 身上的所有金币.但就算是骑士也不会残 ...
- CodeForces 994B Knights of a Polygonal Table(STL、贪心)
http://codeforces.com/problemset/problem/994/B 题意: 给出n和m,有n个骑士,每个骑士的战力为ai,这个骑士有bi的钱,如果一个骑士的战力比另一个骑士的 ...
- POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...
- poj 2942 Knights of the Round Table 圆桌骑士(双连通分量模板题)
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 9169 Accep ...
- POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 12439 Acce ...
- POJ 2942 Knights of the Round Table
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 10911 Acce ...
随机推荐
- MessageDigest来实现数据加密
MessageDigest MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值. M ...
- 网页发起qq临时会话
qq官方:http://shang.qq.com/v3/widget.html
- [luogu3938][斐波那契]
题目链接 思路 首先可以看出来每个月新增的兔子构成的斐波那契数列.然后每代兔子都可以用斐波那契数列中的一个数来表示.所以对于每只兔子都能在斐波那契数列中找到他所属的一个位置.因为每个兔子都是在两个月之 ...
- MVC控制器传递多个实体类集合到视图的方案总结
MVC控制器向视图传递数据包含多个实体类的解决方案有很多,这里主要针对视图模型.动态模型以及Tuple三种方法进行一些总结与记录. 基础集合类:TableA namespace ViewModelSt ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
- 关于python类变量和实例变量
今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...
- (链表) leetcode 21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- Go-day06
今日内容概要: 1.interface接口 2.反射 一.接口 接口定义 1.Interface类型可以定义一组方法,当时不需要实现,并且interface不能包含任何变量 2.接口定义 type e ...
- Sqlserver 数据库定时自动备份
sqlserver 可以通过微软工具 SQL Server Management Studio 进行数据库定时自动备份,具体步骤如下: 1,打开SQL Server Management Studi ...
- hive记录-cdh配置hive和sentry
1.cdh添加组件-sentry-选择主机-配置数据库 2.配置数据库 1)mysql -uroot -p 2) create database sentry DEFAULT CHARSET utf8 ...