贪心WA20分 求调/求hack
查看原帖
贪心WA20分 求调/求hack
556072
wang1h楼主2024/10/5 12:30

下文中的 mm 指题目中的 tt
大致思路是每天做题目数前 mm 大的科目,然后将这 mm 个科目都做去其中题目数最少的科目(也就是题目数第 mm 大的科目),用堆维护。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int N=1e6+5;
priority_queue<ll>q;
int n,m;
ll x,ans,a[N];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%lld",&x),q.push(x);
	for(;q.size()>=m;){
		for(int i=1;i<m;i++)a[i]=q.top(),q.pop();
		x=q.top();q.pop();ans+=x;//题目数第m大的科目
		for(int i=1;i<m;i++)if(a[i]-x>0)q.push(a[i]-x);
	}
	printf("%lld",ans);
	return 0;
}
2024/10/5 12:30
加载中...