没想到我也要求助橙题了
查看原帖
没想到我也要求助橙题了
1083200
guojiahong楼主2025/1/24 13:03
#include<bits/stdc++.h>
using namespace std;
int a[100001];
int b[100001];
int t[40];
bool cmp(int x,int y)
{
	return x>y;
}
signed main(){
	int n,m;
	scanf("%d%d",&n,&m);
	int m1=m;
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)b[i]=__lg(a[i]);
	for(int i=1;i<=n;i++)t[b[i]]++;
	int t1=0;
	for(int i=32;i>=0;i--)
	{
		if(m1>=t[i])
		{
			t[i-1]+=t[i];
			m1-=t[i];
			t[i]=0;
		}
		else
		{
			t1=i;
			break;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(b[i]>t1)
		{
			a[i]/=(1<<(b[i]-t1));
			m-=(b[i]-t1);
		}
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=m;i++)a[i]/=2;
	long long sum=0ll;
	for(int i=1;i<=n;i++)sum=sum+a[i];
	printf("%lld\n",sum);
	return 0;
}
2025/1/24 13:03
加载中...