K-干员测试(优先队列&贪心)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K-干员测试(优先队列&贪心)相关的知识,希望对你有一定的参考价值。

K-干员测试(优先队列&贪心)

思路

优先队列直接维护答案,每次取最小的,然后新元素入队时加上队首。

最后队尾的元素即为答案。

code

// Problem: 干员测试
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/16786/K
// Memory Limit: 262144 MB
// Time Limit: 2000 ms
// Date: 2021-05-31 15:41:31
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0) 
void Print(int *a,int n){
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\\n",a[n]); 
}
int n,m,x;
priority_queue<ll,vector<ll>,greater<ll> > q;
ll a[N];
int main(){
	scanf("%d%d%d",&n,&m,&x);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		a[i]=(a[i]+x-1)/x;
	}
	for(int i=1;i<=m;i++) q.push(a[i]);
	for(int i=m+1;i<=n;i++){
		ll j=q.top();q.pop();
		q.push(j+a[i]);
	}
	ll ans;
	while(!q.empty()) ans=q.top(),q.pop();
	printf("%lld\\n",ans);
	return 0;
}

以上是关于K-干员测试(优先队列&贪心)的主要内容,如果未能解决你的问题,请参考以下文章

贪心+优先队列502. IPO

BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)

LeetCode----IPO「贪心/优先队列」

力扣每日一题 502. IPO [贪心+优先队列]

CodeForces - 721D 贪心+优先队列(整理一下优先队列排序情况)

HDU 1789 - Doing Homework again - [贪心+优先队列]