Knights of a Polygonal Table(骑士的多角桌)

Posted johnnyzen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Knights of a Polygonal Table(骑士的多角桌)相关的知识,希望对你有一定的参考价值。

【程序结果:用例未完全通过,本博文仅为暂存代码之目的】

/*
	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("
%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 ?" ":"
"));//test	
		//printf("%d %d %d
", persons[i].power, persons[i].coins, persons[i].expected_coins);//test
	}
	
	return 0;
}

  

以上是关于Knights of a Polygonal Table(骑士的多角桌)的主要内容,如果未能解决你的问题,请参考以下文章

CF994B Knights of a Polygonal Table 第一道 贪心 set/multiset的用法

Codeforces 994B. Knights of a Polygonal Table

POJ 2942Knights of the Round Table(二分图判定+双连通分量)

UvaLive3523 Knights of the Round Table(点双联通分量+二分图染色)

[Usaco2005 Dec]Knights of Ni 骑士

poj 2942 Knights of the Round Table - Tarjan