求助,一个不知道为什么的bug
查看原帖
求助,一个不知道为什么的bug
1044843
QWERT130楼主2024/9/14 21:01

不知道为什么,T了三个点,下载数据后发现num的大小突然飙到12亿,虽然后来选择在每次循环中重新定义一遍优先队列过了,但还是想知道原因

#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int n,b[1005],k,ans,mx,tot,tmp;
priority_queue<int>num;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)scanf("%d",b+i);
	for(int i=1;i<=n;i++)mx=max(mx,b[i]);
	for(int i=1;i<=mx;i++){
		while(!num.empty())num.pop();
		tot=0;
		for(int j=1;j<=n;j++){
			tot+=b[j]/i;
			num.push(b[j]%i);
		}
		if(tot>k)continue;
		else if(tot<k/2)break;
		else{
			int sum=(tot-k/2)*i;
			for(int j=tot-k/2+1;j<=k/2;j++){
				sum+=num.top();
				num.pop();
			}
			ans=max(ans,sum);
		}
	}
	printf("%d",ans);
}
2024/9/14 21:01
加载中...