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(点双联通分量+二分图染色)