P6033求助
  • 板块学术版
  • 楼主I_will_AKIOI我心依旧
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/9 17:39
  • 上次更新2023/10/23 18:52:57
查看原帖
P6033求助
565265
I_will_AKIOI我心依旧楼主2023/4/9 17:39

#3 RE #4 TLE

提交传送门

#include<bits/stdc++.h>
using namespace std;
int a[10000001],ans,n,a1,a2,x,maxx;
int main()
{
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&x);
    a[x]++;
    maxx=max(maxx,x);
  }
  for(int i=1;i<=maxx;i++)
  {
  	while(a[i])
  	{
  	  if(a1==0) //找两个最小的点相加
	  {
		a1=i;
		a[i]--;
	  }
	  else if(a2==0)
	  {
	  	a2=i;
		a[i]--; 
	  } 
	  if(a1>0&&a2>0)
	  {
	  	a[a1+a2]++;//合并
	  	maxx=max(maxx,a1+a2);
	  	ans+=a1+a2;
	  	a1=0;
	  	a2=0;
	  }
	}
  }
  cout<<ans;
  return 0;
}


2023/4/9 17:39
加载中...